Javascript 循环内条件附加的更改

Javascript 循环内条件附加的更改,javascript,jquery,json,post,append,Javascript,Jquery,Json,Post,Append,我使用javascript将行和列附加到表中。但是我需要td中的一个类名,根据`$.post响应中的条件将其转换为其他内容 我这样做: let arr = ['Hermione', 'Ron', 'Harry'] arr.forEach(d=>{ $('#the_table>tbody').append(` <tr id='tr_${d}'> <td'>${d}</td&

我使用javascript将行和列附加到表中。但是我需要td中的一个类名,根据`$.post响应中的条件将其转换为其他内容

我这样做:

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();
当我这样做的时候,它只是改变了第一个值的值,赫敏。但是在console.log中,我可以看到data.value没有启动,所以应该改为yes

当条件通过后,我可以为每一行将其更改为“是”吗

$('#change').removeClass('no').addClass('yes');
您需要修复此选择器$'change'

我不知道api返回是否有id

但是你需要像这样选择它

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

您是否可以提供JSFIDLE或任何联机代码设置来调试更多内容?我可以看到第一个元素是有一个不被忽略的引用。 ${d}应该是这样的${d}


谢谢

问题是您使用相同的id名称来标识许多不同的行。 每个ID必须是唯一的。因此,如果您有许多元素要操作,最好通过它们的类名来识别它们。将属性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();

您有多个元素具有相同的id值,这是不允许的。您需要找出一种方法来区分它们。您可以在.forEach中使用索引,但还需要从.post调用返回索引