假设您有一个html表:
<table id="data">
<thead>
<tr>
<td>ID</td>
<td>Username</td>
<td>First Name</td>
<td>Last Name</td>
</tr>
</thead>
<tbody>
<?php foreach($arrData as $arrRecord) { ?>
<tr id="tr_<?php echo $arrRecord["id"]; ?>">
<td><?php echo $arrRecord["username"]; ?></td>
<td><?php echo $arrRecord["fname"]; ?></td>
<td><?php echo $arrRecord["lname"]; ?></td>
</tr>
<?php }?>
</tbody>
</table>
你有一个JSON对象:
objUser = {"id":12,"username":"j.smith","fname":"john","lname":"smith"};
并且您希望在相应的表行中更改该记录(假设此表已经有一行id =“tr_12”):
$('#tr_' + objUser.id).find("td").eq(1).html(objUser.id);
$('#tr_' + objUser.id).find("td").eq(2).html(objUser.username);
$('#tr_' + objUser.id).find("td").eq(3).html(objUser.fname);
$('#tr_' + objUser.id).find("td").eq(4).html(objUser.lname);
使用jQuery更新/更干净的表行是否比最后显示的代码块更新?
答案 0 :(得分:6)
我认为你可能会做一些事情
$('#tr_' + objUser.id).find("td").eq(1).html(objUser.id);
$('#tr_' + objUser.id).find("td").eq(2).html(objUser.username);
$('#tr_' + objUser.id).find("td").eq(3).html(objUser.fname);
$('#tr_' + objUser.id).find("td").eq(4).html(objUser.lname);
可能成为:
$this = $('#tr_' + objUser.id).find("td");
$this.eq(1).html(objUser.id);
// And so on
如果已经存在,您可以进行彻底的替换
if ($('#tr_' + objUser.id).length) {
var newHtml = '<td>' + .objUser.username + '</td>'
+ '<td>' + objUser.fname + '</td>'
+ '<td>' + objUser.lname + '</td>';
$('#tr_' + objUser.id).html(newHtml);
}
答案 1 :(得分:2)
$(function() {
var objUser = {"id":2,"username":"j.smith","fname":"john","lname":"smith"};
var objKeys = ["username", "fname", "lname"];
$('#tr_' + objUser.id + ' td').each(function(i) {
$(this).text(objUser[objKeys[i]]);
});
});
答案 2 :(得分:0)
这不是一个好的解决方案,但有点短暂
for(var i = 0; i < objUser.length; i++)
{
$('#tr_' + objUser.id).find("td").eq(i + 1).html(Object.keys(objUser)[i]);
}
答案 3 :(得分:0)
你可以在Jquery中使用$ .each
var i=1;var row=$('#tr_' + objUser.id);
$.each(objUser, function(key, element) {
row.find("td").eq(i + 1).html(element);i+=1;
});
也许它更长,但你可以忘记attr的名字。 @ jQuery00给出的答案较短,但我无法运行...
答案 4 :(得分:0)
顺便说一句,您的起始HTML有3个<TD>
单元格,其ID位于<TR>
,而您的Javascript会创建4个<TD>
单元格,其中ID位于其中一个单元格中。
如果你可以向单元格添加id
属性(可能像"td_12_username"
),那么在循环中匹配它们会更容易,以确保放置正确的数据:
$.each(objUser, function(key, v){
// Forces to skip the "id" key, otherwise sets value into the matching <TD>
key !== "id" && $("#td_"+ objUser.id+ "_"+ key).html(val);
});
否则,如果你假设JSON对象的顺序和单元格的顺序将保持一致,你可以像@ jQuery00建议的那样。如果您不希望将id作为单元格,则将计数器设置为1。在这种情况下,我建议children()
超过find()
,因为它只会查看<TR>
的直接子项,而不是所有可能的后代。