2010-02-08 2 views
4

В jquery можно объединить «ближайший» или «Родители»() с «hasClass», чтобы он дал мне ближайший элемент с заданным классом, если он существует на странице?jquery hasClass Соответствующий элемент

var matchingDiv = $(this).closest('div').hasClass('SomeClass') 

if (matchingDiv != null) 
{ 
    //we found matching element now manipulate it 

} 

У меня всегда будет либо один соответствующий элемент div, либо нет. Спасибо.

ответ

5
var matchingDiv = $(this).closest('div.SomeClass') 

if (matchingDiv.length) 
{ 
    // use length to find if there was a match. 
    // closest() will always return an object. 
} 

Если это не сработает, возможно, разместите некоторый html. Может, там проблема?

+0

Он действительно работает, спасибо большое. Документация утверждает, что она возвращает null, если не найдено совпадающих элементов – Victor

+0

@Patrick, вы также можете сократить до 'if (matchingDiv.length)', поскольку 0 будет оцениваться как 'false' –

+0

@Doug, Very true. Более лаконичный и лаконичный - это хорошо. Будет исправлено. – user113716

0

Вы спрашиваете, будет ли это работать или нет?

Сверху моей головы я бы сказал, что это так, потому что парадигма jQuery основана на объединении функций jQuery.

0

doc for closest

var matchingDiv = &(this).closest('.SomeClass') 

if (matchingDiv != null) 
{ 
    //we found matching element now manipulate it 

} 
+0

Похоже, он специально хочет элемент «div» с классом. – user113716

+0

@patrick, я включил ссылку documetacion «ближайшего», я думаю, @VictorS может просмотреть документацию и завершить то, что вам нужно –

1

попробовать это, ближе всего принимает селектор:

var matchingDiv = $(this).closest('div.SomeClass') 

if (matchingDiv != null) 
{ 
    //we found matching element now manipulate it 

} 
+0

Я пробовал это, прежде чем он не работает по неизвестным мне причинам, он должен imo – Victor

+0

странно, как насчет: $ (this) .parents ('div'). find ('. SomeClass: first') – kmehta

+0

Это не работает. Вы проверяете значение null всегда будет правдой, даже если не было соответствия. – user113716

0

Разница между ближайшим() и родителей() является то, что родители() может дать вам больше, чем один элемент, если ваш селектор соответствует нескольким. (для чего это стоит)

1

Closest занимает селектор, так что вы можете сделать это:

var matchingDiv = $(this).closest('div.SomeClass') 

Ваша следующая строка является проблемой, вы should быть проверка JQuery результат следующим образом:

if (matchingDiv.length) 
{ 
    //we found matching element now manipulate it 
} 
1

Если вам нужно проверить может ли сам текущий элемент быть предком, которого вы ищете. Вы можете использовать комбинацию is() и closest() следующим образом:

var matchingDiv = $(this).closest('.SomeClass'); 

matchingDiv = matchingDiv.length == 0 ? (matchingDiv.is('.SomeClass') ? matchingDiv : null) : matchingDiv 

if (matchingDiv != null) 
{ 
    //found matching element 

} 
Смежные вопросы