仅使用子元素将元素添加到元素

时间:2013-02-15 15:03:32

标签: jquery css css-selectors

我会利用jquery在p标签中找到强标签的每个实例,并像这样在p标签中添加一个类:

<p><strong>Bold Text</strong></p>

将成为

<p class="hasStrong"><strong>Bold Text</strong></p>

我不确定实现这一目标的最佳方法,这是一个镜头:

$("p").find("strong").parent("p").addClass("hasStrong");

这样可行,但我希望它选择仅具有强标记的段落,而不是其他任何内容。所以这不会应用这个类:

<p><strong>Bold Text</strong> Here is some more text</p>

我如何使用jQuery做到这一点?

6 个答案:

答案 0 :(得分:4)

$('p:has(strong)').filter(function(){
    return $(this).contents().length === 1;
}).addClass('hasStrong');

http://jsfiddle.net/vbzkt/

答案 1 :(得分:3)

$('p').filter(function(){
     return $(this).text() == $(this).find('strong').text();
}).addClass('yourclass');

答案 2 :(得分:2)

使用jQuery选择文本节点并不容易。如果您不需要这样做,这将更容易。

但是,您仍然可以使用.contents来检查文本节点长度。

$("p").find("strong:only-child").each(function () {
    var $p = $(this).closest('p');
    if ($p.contents().length === 1) {
        $p.addClass('hasStrong');
    }
});

:only-child非常适合过滤掉合格的节点,但不一定非必要。请注意,这也会突出显示包含子项的<strong>。如果您不想这样做,请检查$(this)是否在回调中没有子项。

答案 3 :(得分:2)

仅选择包含一个或多个p代码且没有文字节点的strong个代码:

$('p').filter(function() {
    return $('strong', this).length == this.childNodes.length;
}).addClass('hasStrong');

FIDDLE

答案 4 :(得分:1)

这是另一个考虑文本节点的解决方案:

$("p").filter( function() {
    return this.childNodes.length === 1 && $( 'strong', this ).length;
} ).addClass("hasStrong");

演示:http://jsfiddle.net/vDfV5/

答案 5 :(得分:-3)

您可以通过向下钻取然后使用“parent()”将类添加到strong父级来完成此操作。

$( “P”)的儿童( “强”)母体()addClass( “hasStrong”);。。。