2010-06-21 69 views
3

目前,我有這樣一行:的jQuery刪除所有的HTML標籤EXCEPT錨

this.html(this.html().replace(/\x3C\x2F?[^\x3E]+\x3E/gi, '')); 

但是,我想沿着「如果條款」,說的東西線,

IF (this.tag = "<a") { 
    do nothing 
} ELSE { 
    remove tag 
} 

我不要以爲任何人有任何想法?

[編輯]:我想我可能需要做一個 「對每個」 循環...我想... [/編輯]

^^

回答

2
this.html(this.html().replace(/<\/?([b-z]+)[^>]*>/gi, function(match, tag) { 
    return (tag === "a") ? match : ""; 
})); 

如果您正在尋找在留下「一個」標籤的地方,改變從[a-z]正則表達式[b-z]

+0

完美,非常歡呼:) – 2010-06-21 09:13:51

+0

這將保持所有** **包含「a」,如'span'。除此之外,它與我的完全一樣,據說不起作用... – RoToRa 2010-06-21 09:20:32

+0

你的代碼確實刪除了我的所有的恐懼。 – 2010-06-21 09:26:11

2

replace可以採取作爲第二個參數的功能

this.html(this.html().replace(/<\/?([a-z]+)[^>]*>/gi, function(match, tag) { 
    return (tag.toLowerCase() === "a") ? match : ""; 
})); 

我沒有使用十六進制編碼的字符,因爲這樣更容易閱讀。

+0

這是正確的IF聲明!但我想保持鏈接完全一樣。這似乎取代了與其他東西的鏈接:( – 2010-06-21 09:05:03

+0

我投票了你,以及付出的努力;) – 2010-06-21 09:14:56

+0

難道是你的標籤是大寫的。我忘了考慮這一點。編輯。 – RoToRa 2010-06-23 10:53:23

4

jQuery有「:不是」僞選擇。

$(':not(a)', this).remove() 
+0

這是最好的答案。當你可以像這樣組合jQuery選擇器時,解決這個問題似乎完全沒有必要。 – 2014-11-21 15:36:44