0

我有一个所见即所得的编辑器,可以在除 IE(所有版本)之外的所有浏览器中使用。我对以下功能有疑问:

function tag(tag) {
    var range = window.frames['textEditor'].getSelection().getRangeAt(0);
    var newNode = document.createElement(tag);
    range.surroundContents(newNode);
}

有想法该怎么解决这个吗?

4

3 回答 3

2

IE < 9 不支持标准 DOM 范围和选择。对于在这些和所有主要浏览器中工作的这些 API 的实现,您可以使用我的Rangy库。

顺便说surroundContents()一句,仅当范围在同一节点或同一节点的子节点中开始和结束时,使用范围的方法才有效。例如,它不适用于以下范围(范围边界由方括号表示):

One |two <b>three| four</b>

要为这样的范围设置样式,您需要一种更微妙的方法。

于 2012-05-20T01:11:02.387 回答
2

IE 不支持范围,因为它是一个大宝贝。但是,它会做你想做的事,但有单独的逻辑。查看Quirksmode Range Page了解如何将 IE 调整为形状。

于 2012-05-20T00:38:11.233 回答
0

如果有人需要脚本,我现在可以在所有浏览器中使用它,我将在下面发布

   function changeHeading(heading) {

  if($.browser.msie && $.browser.version == 7 || $.browser.version == 8)
  {
    theSelection = window.frames['textEditor'].document.selection.createRange().htmlText;
    window.frames['textEditor'].document.selection.createRange().pasteHTML("<"+heading+">"+theSelection+"</"+heading+">")
    $("#textEditor").contents().find(heading).unwrap();
  }

  else {
    var needle =window.frames['textEditor'].getSelection().getRangeAt(0);
    var haystack = $('#textEditor').contents().find("body").text();
    var newText = haystack.replace(needle,"<"+heading+">"+needle+"</"+heading+">");
    $('#textEditor').contents().find("body").html(newText);
    $("#textEditor").contents().find(heading).unwrap();
}
}

谢谢您的帮助

于 2012-05-20T18:39:05.990 回答