我有一个所见即所得的编辑器,可以在除 IE(所有版本)之外的所有浏览器中使用。我对以下功能有疑问:
function tag(tag) {
var range = window.frames['textEditor'].getSelection().getRangeAt(0);
var newNode = document.createElement(tag);
range.surroundContents(newNode);
}
有想法该怎么解决这个吗?
我有一个所见即所得的编辑器,可以在除 IE(所有版本)之外的所有浏览器中使用。我对以下功能有疑问:
function tag(tag) {
var range = window.frames['textEditor'].getSelection().getRangeAt(0);
var newNode = document.createElement(tag);
range.surroundContents(newNode);
}
有想法该怎么解决这个吗?
IE < 9 不支持标准 DOM 范围和选择。对于在这些和所有主要浏览器中工作的这些 API 的实现,您可以使用我的Rangy库。
顺便说surroundContents()
一句,仅当范围在同一节点或同一节点的子节点中开始和结束时,使用范围的方法才有效。例如,它不适用于以下范围(范围边界由方括号表示):
One |two <b>three| four</b>
要为这样的范围设置样式,您需要一种更微妙的方法。
IE 不支持范围,因为它是一个大宝贝。但是,它会做你想做的事,但有单独的逻辑。查看Quirksmode Range Page了解如何将 IE 调整为形状。
如果有人需要脚本,我现在可以在所有浏览器中使用它,我将在下面发布
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();
}
}
谢谢您的帮助