2012-10-11 55 views
4

我試圖刪除<div>內的所有html格式,但特定類別除外。刪除除特定類別以外的格式

我試圖

$('div#text :not(a.keep)').contents().each(function() { 
    $(this).html($(this).text()); 
}); 

但它什麼都不改變到div的內容。

樣本輸入:<span>a </span><span><a class="keep">b</a></span> c

期望的輸出:a <a class="keep">b</a> c

爲什麼?

我爲什麼要這麼做?我有一個div,contenteditable,我想要格式化用戶輸入的內容。我有一個計時器,每隔幾秒我檢查div的內容以查找要格式化的內容,但我想保留已標記的內容。

+0

你們是不是要刪除所有喜歡等或只是從這些元素風格的元素? –

+0

每個元素,主要是 s – Manu

+0

你應該是一個倒車,因爲它也將刪除鏈接,如果有的話。 –

回答

0
+0

這很奇怪。當我複製小提琴時,元素的順序不會保留。 – Manu

+0

如果html是「 ab c」,我得到「c a b」 - > http://jsfiddle.net/5hjnX/5/ – Manu

1

您可以使用非選擇器功能。

$('div#text').not(a.keep).contents().each(function() {  
    $(this).html($(this).text()); 
}); 

然而調用contents()似乎有些什麼奇怪的是,將返回文本節點以及HTML節點看到你正在嘗試設置似乎很奇怪,每一個選擇的元素的html屬性(有沒有HTML設置文本節點)上

,如果你想採取一個節點的所有文字,只有文字內容替換該節點的任何HTML然後換

$('div#text').not(a.keep).children().each(function() {  
    $(this).html($(this).text()); 
}); 

,但如果這就是你想什麼完成我會推薦

$('div#text').not(a.keep).children().each(function() {  
    var text = $(this).text(); 
    $(this).empty().html(text); 
}); 

因爲它更容易看到意圖。這並不是解決問題的遞歸如果您可以在選定的元素