遍歷元素的所有文本節點:
$('div').contents().filter(function() {
return this.nodeType === 3;
}).wrap('<a class="awesomeClass"></a>');
DEMO
.contents()
檢索元素的所有子節點,不僅是元素節點。
.filter
回調會丟棄所有非文本節點的節點。它的工作原理如下:
每個DOM節點都有屬性nodeType
,它指定了它的類型(有什麼意外)。這個值是一個常數。元素節點的值爲1
,文本節點的值爲3
。 .filter
將從集合中刪除回調返回false
的所有元素。
然後,每個文本節點被包裝在一個新元素中。
我有空白問題。
如果你的HTML看起來像
<div>
1
</div>
那麼元素有一個子節點,文本節點。文本節點的值不僅由可見字符組成,還由所有空白字符組成,例如,開始標籤後面的換行符。這裏它們由可見(是一個空間,¬
是換行):因此,¬⋅⋅1¬
<div>¬
⋅⋅1¬
</div>
文本節點的值是。
來解決,這將是修剪的節點值,消除拖尾和前面的空白字符的一種方式:
$('div').contents().filter(function() {
return this.nodeType === 3;
}).each(function() {
this.nodeValue = $.trim(this.nodeValue);
}).wrap('<a class="awesomeClass"></a>');
DEMO
請你解釋一下'this.nodeType === 3'? – Litash
我有空白問題。見:http://jsfiddle.net/2kXsT/2/ – henryaaron
@Litash:看我的更新。 –