Убедитесь, что два элемента являются братьями и сестрами в JS / jQuery - PullRequest
5 голосов
/ 20 февраля 2012

Учитывая следующую структуру HTML:

<div class="wrap">
    <div id="a"></div>
    <div id="b"></div>
</div>

следующее неверно:

($('#a').parent() == $('#b').parent()); //=> false

даже при том, что:

$('#a').parent().children('#b').length; //=> 1

Может кто-нибудь объяснить, почему?Спасибо!

Ответы [ 2 ]

6 голосов
/ 20 февраля 2012

Я не на 100% точно знаю, почему это не работает, но я верю, что это потому, что элементы обернуты в объекты jQuery, которые по своей сути различны для каждого элемента.

В качестве обходного пути вы можетесравните собственный DOM-объект, например:

($('#a').parent()[0] == $('#b').parent()[0]); // true

Пример скрипта

3 голосов
/ 20 февраля 2012

По той же причине, что $('#a) == $('#a') равно false

Каждый раз, когда jQuery создает набор элементов, он возвращает новый объект (даже если объект jQuery переносит те же элементы, что и другой). В JavaScript время only объекта равно другому, если это точно такой же объект;

var a = {
    foo: 1
};
var b = {
    foo: 1
};

(a == b) // false;

Чтобы исправить это, вы можете либо сравнить объекты DOM напрямую (либо с помощью .get(i), либо с помощью объекта jQuery, например, массива ([i])), либо использовать is() метод;

if ($('.foo').get(i) == $('.bar').get(i));
if ($('.foo')[0] == $('.bar')[0]);
if ($('.foo').is($('.bar')); // or even...
if ($('.foo').is('.bar')); 
...