2012-07-12 18 views
1

我有一段文字,我需要用span標記來包裹每個詞組(逗號分隔),這樣我可以在盤旋時動起來......足夠簡單。我需要對除「a#close」之外的所有內容執行此操作。我嘗試過使用「:not」選擇器,但似乎無法按需要使其工作。不能排除字符串中的元素

HTML

<div id="stuff"><p>Words Words Words, Words Words Words, Words Words Words, Words Words 
Words, Words Words Words, Words Words Words, Words Words Words, 
<a href="#" id="close">Close</a></p></div> 

jQuery的

$(function() { 
    $('#stuff:not(a#close)').each(function(){ 
    var text = $(this).html().split(','), 
     len = text.length, 
     result = []; 

    for(var i = 0; i < len; i++) { 
     result[i] = '<span>' + text[i] + '</span>'; 
    } 
    $(this).html(result.join(' ')); 
}); 

我可以讓多達更改HTML標記和投入AP標籤的一個#親密使用不同的ID作爲期望它的工作,但想要理解:不是更好的選擇,那就是如果它是正確的使用。 謝謝

+1

這可能有助於http://jsfiddle.net/elclanrs/nBCQA/ – elclanrs 2012-07-12 21:28:33

回答

1

問題是a#close是容器的子代。你可以選擇所有節點,然後篩選:

$('#stuff *').filter(':not(a#close)').each(function(){ 
var text = $(this).html().split(','), 
     len = text.length, 
     result = []; 

    for(var i = 0; i < len; i++) { 
     result[i] = '<span>' + text[i] + '</span>'; 
    } 
    $(this).html(result.join(' ')); 
}) 

你也可以使用一個map功能存在,以避免循環:

var result = text.map(function(text){ 
    return '<span>' + text + '</span>'; 
}); 
2
+1

我喜歡這個解決方案,我會試着讓它在.each()函數中工作。 thx男人。 – 2012-07-13 01:07:10

相關問題