jQuery.find()忽略根节点

时间:2010-09-03 15:34:19

标签: jquery jquery-selectors

我的jQuery对象如下所示:

var myJq = jQuery("<div class='a'></div><div class='b'></div>")

myJq.find(".a")返回一个空的jQuery对象,显然是因为find()只搜索jQuery对象中包含的节点的 children ,而不是节点本身。

如何使用选择器抓取myJq中的一个div?

3 个答案:

答案 0 :(得分:18)

您需要改为使用.filter()

这将过滤jQuery对象顶层的项目。

myJq.filter(".a")

答案 1 :(得分:8)

这是一个 .find2(),它会找到根元素和子元素:

$.fn.find2 = function(selector) {
  return this.filter(selector).add(this.find(selector));
};

有了这个,你可以这样做:

var html = '<div class="one"><div class="one"></div></div>';
var el = html.find2(".one"); // will match both divs

以下是有关它的更多信息:http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/

答案 2 :(得分:1)

您可以使用.filter()

var div = myJq.filter('.a');

或(更好,更快)使用.first()

var div = myJq.first('.a');

<强>基准

var myJq = jQuery("<div class='a'></div><div class='b'></div>")
var loop = 20000; 

console.time('filter');  
while(loop--){
    var blah = myJq.filter(".a");
}
console.timeEnd('filter');

loop = 20000;

console.time('first');  
while(loop--){
    var blah = myJq.first(".a");
}
console.timeEnd('first');

.first()对我来说快了大约8倍。