2012-06-18 5 views
1

Мне нужно выбрать элементы определенного класса, кроме детей $ (this). Хитрость заключается в том ни один из элементов не имеют атрибут ID и классы родительских и дочерних элементов одинаковы, такjquery: выберите элементы, кроме собственных детей

<div class="onedoc">1 
    <div class="onedoc">1.1 
     <div class="onedoc">1.1.1</div> 
    </div> 
    <div class="onedoc">1.2</div> 
</div> 
<div class="onedoc">2</div> 
<div class="onedoc">3</div> 

в этом примере, если $ (это) является 1 (первый элемент), нужно выбрать элементы, содержащие 1.1.1, 2 и 3

+0

'1.1.1' грандиозно-ребенок' 1'. Вы имели в виду, выберите элементы без детей? –

+0

@ FabrícioMatté: Я предполагаю, что он означает, что дети становятся непосредственными потомками, а не теми, кто находится дальше по линии. –

+1

@JonEgerton Думал так, но тогда '1.1.1, 2 и 3' не будут включать' $ (this) '. Это ожидаемое поведение? –

ответ

4

Что-то, как это должно работать:

$('.onedoc').not($(this).children()); 

DEMO

+0

Но первый элемент не имеет (и не может) иметь id (re your demo) – DMIL

+0

@DMIL Идентификатор просто там, поэтому демо может имитировать уже имеющийся доступ к 'this', что подразумевается вопросом уже известны. –

+0

Это красиво и чисто, и вы можете ссылаться на него [без ID также] (http://jsfiddle.net/ult_combo/6FDMd/1/). –

0

Вы можете использовать jquery remove(): http://api.jquery.com/remove/.

Выберите все элементы onedoc, а затем удалить дочерние элементы из DOM с помощью remove()

например

$('.onedoc').remove($(this).children()); 

Редактировать как на комментарии: Если вы не хотите включать сам узел, а затем удалить это тоже:

$('.onedoc').remove($(this).children()).remove($(this)); 
+0

На самом деле я предпочитаю ответ @ Anthony - может быть немного более оптимальным, чем мой. –

+0

Сообщение: Объект не поддерживает свойство или метод «replace» ... даже если я набрал remove – DMIL

+0

Снова же ошибка Javascript: Object не поддерживает свойство или метод «replace» – DMIL

Смежные вопросы