Как выбрать всех детей (на любом уровне) от родителя в jQuery?


Я должен .unbind() все элементы из родительского узла.

Как я могу выбрать всех детей (на любом уровне) от родителя?

пробовал :

$('#google_translate_element *').unbind('click');

но это работает только для первого детского уровня...

здесь есть тестовый случай

3 59

3 ответа:

использовать jQuery.найти() найти детей более одного уровня глубокий.

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

$('#google_translate_element').find('*').unbind('click');

вам нужно '*' in find():

В отличие от остальных методов обхода дерева, селектор выражение требуется в вызове .находить.)( Если нам нужно получить все потомки элементов, мы можем передать в универсальный селектор '*'для достижения этой цели.

Я думаю, что вы могли бы сделать:

$('#google_translate_element').find('*').each(function(){
    $(this).unbind('click');
});

но это вызовет много накладных расходов

кажется, что исходный тестовый случай неверен.

Я могу подтвердить, что селектор #my_parent_element * работает с unbind().

возьмем в качестве примера следующий html:

<div id="#my_parent_element">
  <div class="div1">
    <div class="div2">hello</div>
    <div class="div3">my</div>
  </div>
  <div class="div4">name</div>
  <div class="div5">
    <div class="div6">is</div>
    <div class="div7">
      <div class="div8">marco</div>
      <div class="div9">(try and click on any word)!</div>
    </div>
  </div>
</div>
<button class="unbind">Now, click me and try again</button>

и бит jquery:

$('.div1,.div2,.div3,.div4,.div5,.div6,.div7,.div8,.div9').click(function() {
  alert('hi!');
})
$('button.unbind').click(function() {
  $('#my_parent_element *').unbind('click');
})

вы можете попробовать его здесь: http://jsfiddle.net/fLvwbazk/7/