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倍。