jQuery.find()忽略根节点

我的jQuery对象如下所示:

var myJq = jQuery("
")

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

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

您需要使用.filter()代替。

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

 myJq.filter(".a") 

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

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

有了这个,你可以做到:

 var html = '
'; 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/

你可以使用.filter()

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

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

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

基准

 var myJq = jQuery("
") 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倍。