通过循环内的条件更改附加的 td

Posted

技术标签:

【中文标题】通过循环内的条件更改附加的 td【英文标题】:Change appended td by condition inside loop 【发布时间】:2020-09-20 10:19:26 【问题描述】:

我正在使用 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();

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

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

【问题讨论】:

您有多个元素具有相同的 id 值,这是不允许的。您需要找出一种区分它们的方法(您可以使用.forEach 中的索引,但您还需要从您的.post 调用中返回一个索引) 【参考方案1】:
$('#change').removeClass('no').addClass('yes');

你需要修复这个选择器 $('#change')

我不知道api返回是否有id

但你需要像这样选择它

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

【讨论】:

【参考方案2】:

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

谢谢

【讨论】:

【参考方案3】:

问题是您使用相同的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();

【讨论】:

以上是关于通过循环内的条件更改附加的 td的主要内容,如果未能解决你的问题,请参考以下文章

为啥表格内的按钮在单击时没有获得 td 的值?

在循环内的 Python 中附加一个矩阵

将每个 seaborn 图形附加到 for 循环内的 PDF

JQuery UI datepicker onChangeMonthYear 获取 td

用于div内的循环附加div

通过python中的if条件附加列表