2016-01-17 24 views
4

我有什麼:使用jQuery來包裝文本後的文本

標籤內的複選框。

<label for="foo"> 
    <input type="checkbox" id="foo" />bar 
</label> 

我需要什麼:

使用jQuery,我需要換行的複選框(即 「巴」)以下的文字,在span元素。

<label for="foo"> 
    <input type="checkbox" id="foo" /><span>bar</span> 
</label> 

我已經試過:

$('label').wrapInner('<span></span>'); 

要求這並不排除該複選框。

回答

7

如果要包裝文本節點,可以根據nodeType屬性是3(它是文本節點的值)並過濾返回的文本節點來過濾元素的內容。

$('label').contents().filter(function() { 
    return this.nodeType === 3; 
}).wrap('<span></span>'); 

或者,如果您知道該文本節點將永遠是input元素的下一個兄弟,你可以使用nextSibling屬性選擇一個同級節點:

$('label input').each(function() { 
    $(this.nextSibling).wrap('<span></span>'); 
}); 
+0

真棒...我想有可能不使用'nodeType'。檢查我的答案。 –

+1

後一種方法的確適用於我的特殊情況。 –