2016-07-09 2 views
0

Так что я хотел знать, почему .parent() элемента возвращает false по сравнению с $ ('# id') в jQuery ,

Я пытаюсь сравнить их, если заявление на моем коде выглядит следующий образом:

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

Это возвращает ложь, так что я сделал некоторые дальнейшие испытания на консоли только с простым йотом и придумал выход ниже:

> $('main') 
< [<main class=​"main">​…​</main>​] 

> $('body') 
< [<body>​…​</body>​] 

> $('main').parent() 
< [<body>​…​</body>​] 

> $('main').parent() === $('body') 
< false 

> $('main').parent() == $('body') 
< false 

Это очень сбивает с толку для меня, так как выход отображается на консоли одинаково. Кто-нибудь имеет представление о реальных значениях, которые предоставляет каждый метод?

Любая обратная связь будет принята с благодарностью. :)

ответ

5

Вы не можете сравнивать объекты JQuery, как это, так как каждый объект JQuery отличается. Элемент DOM ссылки на объект jQuery могут быть такими же, как и у другого, но объект jQuery для root не будет. Это похоже на две разные чашки, которые содержат один и тот же тип жидкости (или что-то в этом направлении, возможно, две разные карты, изображающие один и тот же континент - лучший пример).

Что вы можете сделать, это сравнить элементы DOM через jQuery, получив элемент DOM с помощью get (reference).

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

..much как следующий также будет возвращать true:

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

просто попробуйте вместо этого:
$('main').parent()[0] === $('body')[0]

или даже этот $('main').parent().is($('body'));

0

Использование is(). Чистота для чтения, проста в записи

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