Как выбрать элементы, которые не имеют определенного дочернего элемента с помощью 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 ответов:
вы можете комбинировать
: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/