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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Вы можете комбинировать :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.

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

Это работает: $('p:not("p div")')