2011-02-22 69 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