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