如何在<li>之后用jQuery选择一些特定的文本?</li>

时间:2011-08-05 12:25:14

标签: jquery jquery-selectors

我有类似的东西:

<ul>
  <li>
    ...
  </li>
  <li>
    Office
    <table>
      .......
    </table>
  </li>
</ul>

我想用Office取代<h3>Office</h3>,所以我做了:

$("li:contains('Office')").replaceWith('<h3>Office</h3>');

但是它取代了我所有的<li>(所以它也删除了表格...)我知道这是正常的但是如何只替换文本Office

2 个答案:

答案 0 :(得分:2)

使用.contents.eq仅选择第一个节点。

 $("li:contains('Office')").contents().eq(0).replaceWith('<h3>Office</h3>');

示例:http://jsfiddle.net/ppqvt/

答案 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>");