jquery找到一个没有跨度作为第一个孩子的div

时间:2012-02-28 19:03:42

标签: jquery

div的数量是可变的,但它们都共享一个父容器:

<div>
    <span><br/></span>
    Lorem Ipsum
</div>
<div>
    <!-- need a span here -->
    Lorem Ipsum
</div>
<div>
    <span><br/></span>
    Lorem Ipsum
</div>
<div>
    <!-- need a span here -->
    Lorem Ipsum
</div>
<div>
    <span><br/></span>
    Lorem Ipsum
</div>

如何将span标记添加到所有没有标记的div中。所有的跨度都是相同的,它们只是有一个换行符,所以稍后我可以在父级上调用text(),这些将被转换为\n,因此分组内容将很好地显示在电子邮件enctype="text/plain"

5 个答案:

答案 0 :(得分:5)

$('div').filter(function(){
    return !$(this).children(':first').is('span');
}).prepend('<span><br/></span>');

工作演示 - http://jsfiddle.net/ShankarSangoli/snJhY/

答案 1 :(得分:2)

这是我做的小提示。

$("div").not(":has(span)").addClass("red");​

您需要做的就是将结尾更改为append("span")而不是addClass("red")

它简短而甜蜜,我相信它也很合乎逻辑。找到没有跨度的div。

http://jsfiddle.net/kwelch/zHdfL/

答案 2 :(得分:1)

原来这是有效的,只会将span视为第一个孩子:

$('div:not(:has(span:first-child))').prepend('<span><br /></span>');​

JSFiddle。但它看起来像@kwelch beat me to it。请注意,文本节点不计算在内,因此在您的“Lorem Ipsum”文本之后的<span> 仍然会导致另一个<span>被添加。

答案 3 :(得分:0)

你可以达到你想要的效果

$("div:not(:has(span))").prepend("<span><br/></span>");

答案 4 :(得分:0)

您可以将其添加到所有人,然后删除重复项:

$('div').prepend('<span><br></span>');
$('div span:first-child').nextAll().remove();​