问问题
2057 次
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 回答