jQuery.find() 忽略根节点

发布于 2024-09-17 09:58:49 字数 315 浏览 7 评论 0原文

我的 jQuery 对象如下所示:

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

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

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

My jQuery object looks like this:

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

myJq.find(".a") returns an empty jQuery object, apparently because find() searches only the children of the nodes contained in a jQuery object, not the nodes themselves.

How can I grab one of the divs in myJq using a selector?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟雨扶苏 2024-09-24 09:58:49

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

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

myJq.filter(".a")

You need to use .filter() instead.

This will filter through items at the top level of the jQuery object.

myJq.filter(".a")
娇妻 2024-09-24 09:58:49

这是一个.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/

Here's a .find2() that'll find both root elements and children:

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

With this, you can do:

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

Here's more about it: http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/

离去的眼神 2024-09-24 09:58:49

您可以使用 .filter()

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

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

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

Benchmark

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

You can either use .filter()

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

or (better, faster) use .first()

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

Benchmark

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() is about 8x faster for me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文