如何重新应用jQuery选择器?

时间:2012-01-02 16:46:29

标签: jquery

我有一个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()行上执行我正在寻找的功能?

3 个答案:

答案 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