由循环内条件附加td的变化

问题描述 投票:1回答:3

我正在使用javascript将行和列附加到表中。但是我需要根据`$ .post()响应中的条件将td中的类名之一更改为其他名称。

我这样做:

let arr = ['Hermione', 'Ron', 'Harry']

arr.forEach(d=>{
    $('#the_table>tbody').append(` 
                <tr id='tr_${d}'>
                    <td'>${d}</td>
                    <td><i id='change' class='no'></i></td>
                </tr>
            `);
});

const myfunc = () => {
$.post(api, json_object,
    function(data, status) {
        if (data.value === 'started') {
        setTimeout(myfunc, 5000);
    } else {
        $('#change').removeClass('no').addClass('yes');
        }
}, 'json');
            }
myfunc();

当我这样做时,它只是更改第一个值(Hermione)的值。但是在console.log中,我可以看到data.value不是started,因此应该将其更改为yes

一旦条件通过,我可以将其更改为每一行的yes

javascript jquery json post append
3个回答
1
投票
$('#change').removeClass('no').addClass('yes');

您需要修复此选择器$('#change')

我不知道api返回是否具有id

但是您需要这样选择它

$(`tr#${data.something} #change`)

0
投票

您可以提供JSfiddle或任何在线代码设置来调试更多吗?我可以看到有第一个元素具有一个不被忽略的单引号。$ {d}应该像这样$ {d}

谢谢


0
投票

问题是您使用相同的id name来标识许多不同的行。每个ID必须唯一。因此,如果您要操纵许多元素,则最好通过classname标识它们。如下所示,将属性ID更改为CLASS

 // I have only change the attribute id to class
 let arr = ['Hermione', 'Ron', 'Harry']

 arr.forEach(d=>{
 $('#the_table>tbody').append(` 
     <tr id='tr_${d}'>
       <td'>${d}</td>
       <td><i class='change' class='no'></i></td>// now their identified by class name
            </tr>
        `);
  });

 const myfunc = () => {
 $.post(api, json_object,
     function(data, status) {
         if (data.value === 'started') {
             setTimeout(myfunc, 5000);
         } else {
            $('.change').removeClass('no').addClass('yes');  
         }
     }, 'json');
 }

 myfunc();
© www.soinside.com 2019 - 2024. All rights reserved.