2012-12-25 50 views
6

我在調整wysiwyg編輯器,並且正在嘗試創建一個可以去除h2的選定文本的圖標。Javascript:execCommand(「removeformat」)不去掉h2標籤

在以前的版本中,以下命令完美工作:

oRTE.document.execCommand("removeformat", false, ""); 

但在目前的版本,但該命令成功從選定的文本,標記爲粗體,下劃線,斜體刪除,它留下的h2標籤完整。

(有趣的是,execCommand("formatblock"...)成功地創建了h2標籤。)

我在想,我將不得不放棄execCommand和另謀出路,但我也認爲這將是一個不僅僅是一行代碼!將不勝感激的建議。

回答

3

這是根據建議W3C Editing APIs。它有一個格式化元素列表,H#元素未列出。這些被認爲是結構性的,而不是簡單的格式。刪除這些標籤比刪除ULP沒有任何意義。

+0

我想我應該讓我的問題更加明確:那我該怎麼辦? – oyvey

+0

如果您需要刪除特定元素,請使用顯式DOM操作函數來搜索並刪除它們。 jQuery可以幫助減少代碼行數。 – Barmar

+1

我張貼在這裏得到更詳細的答案。請記住,我只需要從當前突出顯示的文本中刪除h2標籤。 – oyvey

4

您可以更改格式div的,這不是最好的解決辦法,但它的工作原理,它的短:

document.execCommand('formatBlock', false, 'div') 

還有這其他的解決方案,以獲得從所選文本的最接近的父母,那麼你可以解開它請注意,這可能是一些標籤一樣<b>:

var container = null; 
if (document.selection) //for IE 
    container = document.selection.createRange().parentElement(); 
else { 
    var select = window.getSelection(); 
    if (select.rangeCount > 0) 
     container = select.getRangeAt(0).startContainer.parentNode; 
} 
$(container).contents().unwrap(); //for jQuery1.4+ 
1

我想你可以使用範圍對象。 你可以從專業JavaScript for Web Developers 3rd Edition中找到它。 第12章(12.4)和第14章(14.5)...

一個例子來自這本書:

var selection = frames["richedit"].getSelection(); 

var selectedText = selection.toString(); 

var range = selection.getRangeAt(0); 

var span = frames["richedit"].document.createElement("span"); 
span.style.backgroundColor = "yellow"; 
range.surroundContents(span);