修饰文本节点可以用contents()方法来进行操作,跟这个方法经常同时使用的方法还有filter()方法和wrap()方法
<div class="container">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
<br /><br />
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<br /><br />
Duis aute irure dolor in reprehenderit in voluptate velit
esse cillum dolore eu fugiat nulla pariatur.
</div>
上面是一段文本,如果想要直接更改这段文本的样式,比如段落间的行间距,不用<br />
换行等比较困难,那么我们可以将它用p标签包裹,对p标签进行修饰,就比较容易,so:
$(".container").contents().filter(function(){
return this.nodeType == 3;
}).wrap("<p class='sty' style='color:red'></p>")
.end().filter("br").remove();
以上代码将会把<div class="container"></div>
中的所有文本和注释节点转换为以下代码:
<div class="container">
<p class="sty" style="color:red">...</p>
<p class="sty" style="color:red">...</p>
<p class="sty" style="color:red">...</p>
</div>
这样对p标签修饰就非常方便了。
这里边用到了其他几个很有用的方法,在这里也提一下:
filter()方法
该方法返回带有符合一定规则的元素,点击查看 filter()方法
本例中,这种规则为nodeType值为3的元素,也就是节点类型为text元素,这里有 nodeType属性详解wrap()方法
该方法用指定的元素来包裹每个被选中的元素,点击查看 wrap()方法
本例中,通过filter()方法选出text元素后,用<p></p>
标签进行包裹,重要目标已完成,但是<br />
标签还存在,所以需要将之去掉end()方法
该方法结束当前新对象的操作,回到最初的旧对象,也就是从$("p")
回到$(".container")
对象,点击查看 end()方法
其实就是这样的:
$(".container").contents().filter().wrap();
$(".container").filter().remove();
只不过end()方法能让整个代码连成一块…
然后呢,就是继续用filter()方法选出<br />
标签,然后remove(),完成!