2
4

3 回答 3

1

您可以使用filter()contents()来验证该<p>元素只有一个子节点并且该节点是一个<b>元素:

$("#selector p").filter(function() {
    var $contents = $(this).contents();
    return $contents.length == 1 && $contents.eq(0).is("b"); 
}).replaceWith(function() {
    return "<p class='h_replace'>" + $(this).text() + "</p>";
});
于 2012-09-05T05:56:54.467 回答
1

试试这个:

var els = $('p').filter(function() {
    return /^<(b)>.+<\/\1>$/.test($.trim($(this).html()));
});

它会让你拥有一个没有任何文本节点p的独生子女。b您可以(b)使用上面代码中的任何标签进行更改。

编辑:不知道为什么投反对票,但这很好用:

  • <p><b>Something</b></p> // true
  • <p> <b>Something</b> </p> // true
  • <p><b>Something</b> lorem</p> // false
  • <p>lorem <b>Something</b></p> // false
  • <p><span><b>Something</b></span></p> // false

演示:http: //jsfiddle.net/elclanrs/LFt8x/

于 2012-09-05T06:00:00.080 回答
0

elclanrs answer 可以正确选择文本。同样,演示页面在这里

最终代码:

$(document).ready(function() {

    var pbs = $('#selector p').filter(function() {
        return /^<(b)>.+<\/\1>$/.test($.trim($(this).html()));
    });

    pbs.replaceWith(function() {
        return '<p class="h_replace">' + $(this).text() + '</p>';
    }).addClass('h_replace2').css('width', '100%');

});

StackOverflow 是最伟大的。感谢所有参与进来的人!节省了我几个小时(我的意思是几天!!)谢谢!

于 2012-09-05T06:17:49.147 回答