我有类似的东西:
<ul>
<li>
...
</li>
<li>
Office
<table>
.......
</table>
</li>
</ul>
我想用Office
取代<h3>Office</h3>
,所以我做了:
$("li:contains('Office')").replaceWith('<h3>Office</h3>');
但是它取代了我所有的<li>
(所以它也删除了表格...)我知道这是正常的但是如何只替换文本Office
?
答案 0 :(得分:2)
使用.contents
和.eq
仅选择第一个节点。
$("li:contains('Office')").contents().eq(0).replaceWith('<h3>Office</h3>');
答案 1 :(得分:1)
您可以使用contents()获取<li>
元素的所有直接子元素,并使用filter()来累积<table>
元素之前的文本节点。
从那里,您可以使用wrapAll()在文本节点周围创建<h3>
元素:
var $contents = $("li:contains('Office')").contents();
var tableIndex = contents.index("table");
$contents.filter(function(index) {
return this.nodeType == 3 && index < tableIndex;
}).wrapAll("<h3>");