Ну, ближайший полезен, только если вы идете вверх или на том же уровне на элементе «нажал».
Если, например, вам нужен следующий сценарий:
<div class="controls radio-other">
<label class="radio"><input type="radio" name="item">Option one</label>
<label class="radio"><input type="radio" name="item">Option two</label>
<label class="radio"><input type="radio" name="item" class="other-option" data-othertarget="#otherone"> Other... </label>
<input type="text" placeholder="Alternative answer" id="otherone" class="hidden">
</div>
Тогда closest('#otherone')
не найдет скрытое текстовое поле на $('.other-option').click()
Лучшее решение в этом сценарии - использовать $(this).parentsUntil('.radio-other').find('#otherone')
Глядя на мой ответ, я сделал jsperf , который отражает приведенный выше сценарий с различными решениями. Просто используйте то, что наиболее полезно для вашего HTML-сценария.
В результате parent().parent()
является самым быстрым методом, однако это не всегда хороший вариант, если ваш html более гибок в использовании. Добавьте родителя div и разрывы parent().parent()
.