JQuery найти антецедент?
Когда я хочу найти дочерний объект, я могу использовать children()
; когда я хочу найти объект внутри другого объекта, не обязательно его дочерний элемент, я могу использовать find()
. Если я хочу найти родителя, я использую parent()
, но если я хочу найти антецедент, не зная, является ли он родительским дедушкой, прадедом и дедушкой, как я могу это сделать?
Я приведу вам пример: я создаю плагин, который должен применяться к некоторому "вводу: текст".
В конце концов, мне нужно сделать что-то в форме, которая их удерживает. Но иногда текстовые поля будут непосредственно внутри формы, или они могут находиться внутри неупорядоченного списка или внутри таблицы.
Можно ли ссылаться на форму в общем виде?
Ответы
Ответ 1
Вы можете использовать метод jQuery closest()
:
$('input:text').change(
function(){
var ancestorFormElement = $(this).closest('form');
// do stuff.
});
$('input:text').change(function() {
var ancestorFormElement = $(this).closest('form');
ancestorFormElement.addClass('hasInputChanged');
});
form {
border: 2px solid #000;
padding: 1em;
}
form.hasInputChanged {
border-color: limegreen;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="#" method="post">
<fieldset>
<legend>Simple demo</legend>
<label for="name">Text Input:</label>
<input type="text" name="name" id="name" value="" tabindex="1" />
</fieldset>
</form>
Ответ 2
Я не совсем уверен, каков ваш вопрос, поскольку это не очень ясно, как есть.
Я думаю, что вы можете искать функцию jQuery parents()
.
Пример:
<table>
<tr>
<td id="content"></td>
</tr>
</table>
$("#content").parents("table")
должен получить элемент <table>
.
Ответ 3
Взгляните на http://api.jquery.com/parents/ и http://api.jquery.com/parentsUntil/