Как выбрать элементы, которые не имеют определенного дочернего элемента с помощью JQuery
есть ли селектор JQuery для выбора всех элементов, которые делают не есть определенный дочерний элемент как прямой ребенок? Например:
<p>
text in paragraph
</p>
<p>
<div>text in div</div>
</p>
Я хочу выбрать только <p>
как первый (без <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/