2011-02-22 80 views
1

我正在修復編輯器,並突出顯示文本問題。突出顯示文本問題

我得到這個代碼,檢查你有什麼用戶突出顯示(下面的代碼中詳細介紹):

function getSelectionHTML() 
{ 
    var iframe = document.getElementById(theEditorID); 
    var win, doc = iframe.contentDocument; 
    if(doc) 
     win = doc.defaultView; 
    else 
    { 
     win = iframe.contentWindow; 
     doc = win.document; 
    } 
    var userSelection; 

    if(win.getSelection) 
    { 
     userSelection = win.getSelection(); 
     if(userSelection.getRangeAt) 
      var range = userSelection.getRangeAt(0); 
     else 
     { 
      var range = document.createRange(); 
      range.setStart(userSelection.anchorNode, userSelection.anchorOffset); 
      range.setEnd(userSelection.focusNode, userSelection.focusOffset); 
     } 
     var clonedSelection = range.cloneContents(); 
     var div = document.createElement('div'); 
     div.appendChild(clonedSelection); 
     callIcons(div.innerHTML); 
    } 
    else if(doc.selection) 
    { 
     userSelection = document.selection.createRange(); 
     callIcons(userSelection.htmlText); 
    } 
}; 

當用戶突出顯示一些大膽的文字和其他一些斜體文字,我得到這樣的輸出:

<b>some text</b><i>some other text</i> 

但是,當用戶只突出粗體文字我得到這個輸出(沒有「大膽」標籤):

some text 

您可以在此查看,直播 - http://brownfolder.com/06/ 突出顯示一些文字後,您會看到提醒。

你有什麼想法我該如何解決這個問題?

在此先感謝。

回答

2

瀏覽器會根據所選內容是否包含周圍標籤而有所不同。如果選擇完全包含在標籤中,它們通常不包括周圍的標籤。可以從選擇開始逐步選擇DOM,並檢查每個元素是否爲<b>標記。但是,如果您正在使用的iframe使用contenteditable,則不能保證它會使用<b>標籤進行粗體顯示。還有其他的方法文本可能會以粗體顯示:IE平時增加了<STRONG>標籤大膽,和Firefox和WebKit可以使用<跨度風格=「字體重量:大膽>

它可能更好地使用queryCommandState(」大膽'),而不是使用iframe文檔

+0

可能更容易使用像閉包一樣的範圍庫:http://code.google.com/p/closure-library/source/browse/trunk/closure/goog /dom/range.js?r=2 – Annie 2011-02-23 02:55:47