2013-03-26 2 views
26

closest() получит первый элемент, соответствующий селектору, путем тестирования самого элемента и прохождения его предков в дереве DOM. Но я хочу знать, есть ли какой-либо способ получить результат, исключая itseft (я имею в виду только получить родителей от него)? Благодарю.jquery closeest exclude self

Позвольте мне привести пример. просмотрите его.

<div id='div1' class="container"> 
    <div id="div2" class="container"> 
     <!--many nested div.container as it directly or indirectly children --> 
    </div> 
    <div id="div3" class="container"> 
     <!--many nested div.container as it directly or indirectly children --> 
    </div> 
</div> 

$(function() { 

    $('div.container').on('mouseover', function(e){ 
     //I only want to select the first parent with the class container. 
     //closest include the this element. 
     console.log($(this).closest('.container').attr('id')); 
    }); 
}); 
+0

может объяснить больше? добавление фрагментов кода было бы более полезным ... – Reigel

+3

'.parents()' поможет. –

+0

@Reigel Не могли бы вы пересмотреть его еще раз? Я обновился. Благодарю. –

ответ

0

Правильный ответ .parents('.container:first'); благодаря

+15

Производительность, '.parent(). Ближайшая ('. Container')' должна работать лучше, поскольку она останавливается после сопоставления первого элемента, в отличие от '.parents()', которые всегда пересекаются вплоть до уровня документа. –

+0

Вы знаете? Я думаю, что '.parent() ....' немного жесткий код. –

+3

Ну да. Переход на один уровень вверх, когда вы не хотите соответствовать первому уровню, логичен. В любом случае оба имеют один и тот же результат - разница заключается в том, что наличие ': first' внутри' parent() 'может быть немного дорогостоящим, поскольку': first' является расширением Sizzle, а селекторы обычно сопоставляются с каждым элементом (предком) до возвращение. –

69

Вы можете пройти уровень, прежде чем пытаться найти .closest() предка:

$(this).parent().closest('.container'); 
0

Если вы действительно хотите, только родитель дивы, то да $ (это) .parents ('. container') будет работать. Если вы хотите найти ближайший элемент и позволить ему быть родным братом (который, кажется, может быть тем, что вы на самом деле пытаетесь выполнить), вы можете использовать $ (this) .prev ('. Container').

+0

Это не будет полезно, потому что вы никогда не знаете, является ли его родитель на один уровень выше или выше, и вы нацеливаете своих родителей по классу! Что делать, если

был вложен в другой тег div, у которого не было класса, и он все еще хотел нацелить его на родителей! –