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

JQuery - выберите все, кроме отдельных элементов и его дочерних элементов?

Я пытаюсь удалить все во всем теле, за исключением одного элемента и его детей. Как я могу это сделать?

Изменить 1 Рассмотрим следующую разметку:

<html>
   <body>
      <div id="div1"></div>
      <div id="div2">
         <div id="elementNotToRemove"></div>
      </div>
      <div id="div3"></div>
      <div id="div4"></div>
   </body>
</html>

В приведенном выше примере я хочу удалить div1, div3 и div4, а также их дочерние элементы, но сохранить div2, потому что он содержит элемент, который нельзя удалить.

4b9b3361

Ответ 1

 $("body > *").not("body > #elementtokeep").remove();

Вы можете заменить часть not() тем, что хотите сохранить

Ответ 2

Вы можете сделать это следующим образом:

$('body > *:not(#dondelete)').remove();

Если ваш элемент имеет id="dondelete" и является дочерним элементом тела.

Ответ 3

Это старый вопрос, но принятый ответ неверен. В этой ситуации это не работает (см. http://jsfiddle.net/LVb3V/) и, конечно, не как общее решение.

Лучше использовать:

$('body *').not('#div2, #div2 *').remove()​;

Это приведет к удалению всех элементов в теле, кроме div2 и всех содержащихся в нем элементов.

Ответ 5

Я думаю, что

$("body *").not("body #div2")
           .not("body #div2 #elementtokeep")
           .not("body #div2 #elementtokeep *")
           .remove();

- самый простой способ сфокусировать его.

http://jsfiddle.net/6vb2va6g/

Ответ 6

Этот код работал у меня.

$('body > * :not(#123)').remove()

Вам нужно указать пробел между * и:. Раньше, когда пытались использовать код с

$('body > *:not(#123)').remove() это не сработало. Я должен был предоставить пробел между символами * и:.

Счастливое кодирование.