Подтвердить что ты не робот

JQuery найти антецедент?

Когда я хочу найти дочерний объект, я могу использовать children(); когда я хочу найти объект внутри другого объекта, не обязательно его дочерний элемент, я могу использовать find(). Если я хочу найти родителя, я использую parent(), но если я хочу найти антецедент, не зная, является ли он родительским дедушкой, прадедом и дедушкой, как я могу это сделать?

Я приведу вам пример: я создаю плагин, который должен применяться к некоторому "вводу: текст".

В конце концов, мне нужно сделать что-то в форме, которая их удерживает. Но иногда текстовые поля будут непосредственно внутри формы, или они могут находиться внутри неупорядоченного списка или внутри таблицы.

Можно ли ссылаться на форму в общем виде?

4b9b3361

Ответ 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>.