我有一个javascript函数,它选择了几个元素,然后执行一些DOM操作。当DOM操作涉及添加更多与初始选择器匹配的元素时,我想重新应用它们以包含新元素。
var row1 = table.find("tr.row1 td");
var row2 = table.find("tr.row2 td");
var row3 = table.find("tr.row3 td");
for(...) {
if() {//Some condition is met
table.children().each(function(row) {
row.append(row.children().eq(5).clone());
});
row1.refresh(); // I'd like something here like refresh, rather than row1 = table.find("tr.row1 td");
}
//Code that uses row1, row2, and row3
}
是否有一个功能可以在refresh()
行上执行我正在寻找的功能?
答案 0 :(得分:7)
实际上没有一个功能能够完成您所描述的功能,您只需重新发出原始请求。
如果你有一个jQuery对象(比如你的row1
),你可以使用这个未记录的机制来重新运行原始请求:
row1 = $(row1.selector, row1.context);
...但同样,selector
属性未记录(context
已记录),因此while it works now in 1.7.1,它可能无法在1.7中使用。 2。
更好的方法可能是只保留行的jQuery对象,只要您实际使用它,但这取决于重新获取列表的成本以及执行此操作的频率。
答案 1 :(得分:3)
不存储允许获取结果集的初始选择器,因此您可以重新执行此选择器:
row1 = table.find("tr.row1 td");
答案 2 :(得分:1)
jQuery对象本质上是Array
HTMLElements
。只需在追加它们时按下新元素:
row1.push(row.children().eq(5).clone().appendTo(row)[0]);
我没有测试此链,但我相信appendTo()
将返回克隆的jQuery对象,[0]
将返回相应的HTMLElement