JQuery: вопрос выбора (ближайший) - PullRequest
1 голос
/ 26 марта 2011

У меня есть эта разметка:

<div class=gui>
    <div class=form>
        <div class=textbox></div>
        <div class=textbox></div>
        <div class=textbox></div>
        <div class=selectbox></div>
        <div class=selectbox></div>
        <div class=button></div>
    </div>
</div>

что я хочу сделать, это повторить div и найти их соответствующих родителей. как:

текстовые поля> форма

выберите> форма

кнопка> форма

Форма> GUI

вот мой селектор jQuery:

var dParent = div.closest("div.form, div.gui");

это хорошо работает для текстовых полей и полей выбора, но не для формы. странно то, что форма сообщает о себе как о родителе, а не о графическом интерфейсе.

есть идеи, что может быть не так?

спасибо

Ответы [ 3 ]

4 голосов
/ 26 марта 2011

.closest() выберет вызывающий элемент, если он соответствует селектору, поэтому при вызове $('.form').closest('.form, .gui') он вернет себе .form как ближайший. Поэтому вы просто хотите позвонить ближайшим из .parent():

var dParent = div.parent().closest("div.form, div.gui");

См. Пример & # x2192;

2 голосов
/ 26 марта 2011
var parent = div.hasClass('form') ? div.closest('.gui') : div.closest('.form');

Было бы моим лучшим предположением, ничего не зная о структуре.

0 голосов
/ 26 марта 2011

Ближайший работает, начиная с текущего элемента и обходя дерево, пока не найдет элемент, соответствующий селектору. Когда вы начинаете с формы, сама форма соответствует селектору, поэтому она выбрана. Поскольку все, что вам нужно сделать, это найти родителя, подходящий метод для использования - parent с селектором:

  div.parents('.form:first,.gui:first');

Используется как:

  div.each( function() {
      alert( $(this).attr('class')
                + ' has parent '
                + $(this).parents('.form:first,.gui:first')
                         .attr('class')
      );
  });

См. Пример в действии по адресу: http://jsfiddle.net/tFqLE/

...