您将如何比较jQuery对象?


101

因此,我试图弄清楚如何比较两个jQuery对象,以查看父元素是否是页面的主体。

这是我所拥有的:

if ( $(this).parent() === $('body') ) ...

我知道这是错误的,但是如果有人了解我的意思,他们会指出我正确的做法吗?


2
var $parent = $(this).parent(), $body = $('body'); var theSame = $parent.is($body); api.jquery.com/is/#is-jQuery-object
维克多

1
$(this).parent()。is($('body')); //或检查$('body')之外的其他内容stackoverflow.com/a/6986013/112100
Omu,2014年

Answers:


158

您需要比较原始DOM元素,例如:

if ($(this).parent().get(0) === $('body').get(0))

要么

if ($(this).parent()[0] === $('body')[0])

1
仅当jQuery对象与单个DOM元素匹配时,这将确保相等。如果有多个匹配项,则需要某种循环来比较每个匹配项。
Jimmy Cuadra 2010年

1
@Jimmy,是的,但这足以满足OP的要求,他只想知道“ ...如果父元素是身体……”
CMS 2010年

2
可以简化为:if(this.parentNode === document.body);
ehynds 2011年


60

为什么不:

if ($(this).parent().is("body")) {
  ...
}


1
if ($(this).parent().is($("body")))
2016年

18

不需要循环,不需要测试单个第一个节点。除了确保它们的长度相同并共享相同的节点外,几乎不需要任何其他操作。这是一个小代码段。您甚至可能希望将其转换为jquery插件供您自己使用。

jQuery(function($) {
  // Two separate jQuery references
  var divs = $("div");
  var divs2 = $("div");

  // They are equal
  if (divs.length == divs2.length && divs.length == divs.filter(divs2).length) {         

  // They are not
  } else {}
});

这是否表示以下div相等?<div>abc</div> <div>def</div>
查理·史利瑟

不,过滤器不会传递不相等的DOM元素。
tbranyen 2011年

2

我偶然发现了这些答案,想知道哪个更好。这完全取决于您的需求,但是最简单的键入,读取和执行当然是最好的。这是我做出决定的性能测试用例。

http://jsperf.com/jquery-objects-comparison


Raw DOM Elements 2对我而言报告最快:对于其他报告的浏览器而言,它也是如此。
凯尔·霍奇基斯

确实,它与第一个相同,只是使用javascript的本机数组解析。
Salketer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.