Как выбрать элементы, которые не имеют определенного дочернего элемента с помощью JQuery


есть ли селектор JQuery для выбора всех элементов, которые делают не есть определенный дочерний элемент в качестве прямого ребенка? Например:

<p>
    text in paragraph
</p>
<p>
    <div>text in div</div>
</p>

Я хочу выбрать только <p>s как первый (без <div> ребенок). это возможно?

дополнительная информация: на самом деле я пытаюсь вставить тег <div> во все эти <p> которые не имеют одного выражения, как это:

$('p').wrapInner('<div />')

но это добавило бы дополнительно <div> второй <p>.

5 58

5 ответов:

вы можете попробовать:

$("p:not(:has(>div))")

вы можете комбинировать :has()[docs] селектор с not функции[docs] чтобы добиться этого:

$("p").not(":has(div)").wrapInner("<div/>");

кроме того, вы можете использовать один селектор с помощью :not()[docs] селектор:

$("p:not(:has(div))").wrapInner("<div/>");

вы можете использовать либо взаимозаменяемо, но IIRC, первый быстрее.

посмотреть его в действии на jsFiddle.

отметим, что div является элементом уровня блока и p нет. Это означает, что недопустимо HTML иметь div вложен в тег p.

структурные элементы внутри текстовых элементов выглядят очень нечисто для меня, но если вы настаиваете;)

$('p').not(":has(div)").wrapInner("<div/>");

вот демо:http://jsfiddle.net/NTpES/3/

попробуйте это:

$("p").filter("not(:has(div))").wrapInner("<div/>");

Это, кажется, работает: $('p:not("p div")')