我正在使用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
$('#change').removeClass('no').addClass('yes');
您需要修复此选择器$('#change')
我不知道api返回是否具有id
但是您需要这样选择它
$(`tr#${data.something} #change`)
您可以提供JSfiddle或任何在线代码设置来调试更多吗?我可以看到有第一个元素具有一个不被忽略的单引号。$ {d}应该像这样$ {d}
谢谢
问题是您使用相同的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();