Предки jQuery, использующие объекты jQuery - PullRequest
7 голосов
/ 29 октября 2008

Я бы хотел проверить родословную, используя два объекта jQuery. У них нет идентификаторов, и они будут доступны только в виде объектов jQuery (или узлов DOM, если вы вызвали get()). is() в jQuery работает только с выражениями, поэтому этот код будет идеальным, но не будет работать:

var someDiv = $('#div');

$('a').click(function() {
    if ($(this).parents().is(someDiv)) {
        alert('boo');
    }
}

Просто хочу посмотреть, является ли один элемент дочерним по отношению к другому, и я бы хотел, по возможности, не возвращаться в страну DOM.

Ответы [ 7 ]

12 голосов
/ 29 октября 2008

Вы можете использовать метод index (), чтобы проверить, существует ли элемент в списке, так будет ли работать следующее?

var someDiv = $('#div');

$('a').click(function() {
    if ($(this).parents().index(someDiv) >= 0) {
        alert('boo');
    }
}

Из # индексный указатель .

10 голосов
/ 29 октября 2008

Проверка на (this).parents().index(someDiv) >= 0, как предполагает @Gareth, будет работать нормально.

Однако, используя плагин jQuery-предка , это намного быстрее / эффективнее .

1 голос
/ 29 октября 2008

В соответствии с этим, parent () может принять сам селектор:

$('a').click(function() {
  if ($(this).parents("#div").length) {
    alert('boo');
  }
});
0 голосов
/ 01 сентября 2010
var $element = $('a');
while ($element && !$element.is('someDiv')) {
   var $element = $element.parent();
};
0 голосов
/ 29 октября 2008

Попробуйте это:

var someDiv = $('#div');

$('a').click(function() {
    if ($.inArray($(this).parents().get(), someDiv.get(0)) {
        alert('boo');
    }
}
0 голосов
/ 29 октября 2008

Разве вы не получили бы желаемый результат от простого использования селектора CSS?

$( '#div a' ).click( function() { ... } );
0 голосов
/ 29 октября 2008

Одним из способов будет использование функции фильтра

$('a').click(function() {
    $(this).parents().filter(function() {
       return this == someDiv[0];
    }).each(function() {
       alert('foo');
    })
}

Я думаю, вы также можете обойтись без использования jQuery.inArray

if ($.inArray( someDiv, $(this).parents() ) ) {
        alert('boo');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...