jQuery - Comparing .parent() to $('#id-name')

jQuery - Comparing .parent() to $('#id-name')

本文关键字:#id-name Comparing parent to jQuery      更新时间:2023-09-26

所以我想知道为什么元素的.parent()与jQuery中的$('#id')相比返回false。

我正在尝试在我的代码上的 if 语句中比较它们,如下所示:

if ($navbar.parent() === $('#sticky-wrapper'))

它返回 false,所以我只用简单的 dom 在控制台上做了一些进一步的测试,并得出了下面的输出:

> $('main')
< [<main class=​"main">​…​</main>​]
> $('body')
< [<body>​…​</body>​]
> $('main').parent()
< [<body>​…​</body>​]
> $('main').parent() === $('body')
< false
> $('main').parent() == $('body')
< false

这对我来说非常令人困惑,因为输出在控制台中看起来相同。有人知道每种方法提供的实际值吗?

任何反馈将不胜感激。

你不能像这样比较jQuery对象,因为每个jQuery对象都是不同的。jQuery 对象引用的 DOM 元素可能与另一个相同,但根 jQuery 对象不会。这就像两个不同的杯子,里面装着相同类型的液体(或者类似的东西,也许描绘同一大陆的两张不同地图就是一个更好的例子)。

你可以做的是通过jQuery比较DOM元素,方法是获取带有get(引用)的DOM元素。

$('main').parent().get(0) === $('body').get(0) // true

..非常像以下内容也将返回true

$('body').parent().get(0) === $('html').get(0) // true

只需尝试一下:
$('main').parent()[0] === $('body')[0]

甚至这个$('main').parent().is($('body'));

使用 is() .干净易读,易写

if ($navbar.parent().is('#sticky-wrapper'))