2013-10-09 5 views
0

Учитывая следующую разметку и JS, почему первое утверждение не работает, а seond нет?JQuery и .parent()

JQuery

$('.selector').change(function() { 
    // does work 
    $(this).parent(".controls").after("<div class=\"control-group\">Test</div>"); 

    // doesn't work 
    $(this).parent(".control-group").after("<div class=\"control-group\">Test</div>"); 
} 

HTML

<div class="control-group"> 
    <label class="control-label" for="description">Section Type</label> 
    <div class="controls"> 
    <select class="selector"> 
     // options 
    </select> 
    </div> 
</div> 
+0

что это такое? – Sergio

+0

что это @Lizard –

+0

'this' является элементом dom - я должен был быть более ясным, что это внутри функции llamda от .change Event – Lizard

ответ

5

Вы должны использовать:

  • .closest(), который дает вам только первый элемент, соответствующий этому селектору (начиная с выбранного элемента), или
  • .parents(), чтобы предоставить вам всех родителей, соответствующих t (начиная с родителя текущего выбранного элемента).

.parent() метод путешествует только один уровень вверх по дереву DOM.

1

БАХ! У меня должен быть RTFM!

В .parents() и .parent() методы аналогичны, за исключением того, что последний только путешествует один уровень вверх по дереву DOM