我正在选择一个单词并尝试用元素结构替换它。之前我使用的是IE=EmulateIE7
,下面的代码正常运行。由于几个其他问题,我删除了Emulate IE7元,下面的insertNode停止工作。
function updateNodeAtRange(text, frag) {
var range = getFirstRange();
var htmlcontent='<span id="AuniqueId" class="style1">'+frag+'</span><span id="BuniqueId" class="style2">'+text+'</span>';
if (range) {
rangy.getSelection().deleteFromDocument();
var el = document.createElement("new_update");
el.setAttribute( 'id', 'CuniqueId' );
el.appendChild(document.createTextNode(text)); //Not sure if this is right
el.innerHTML = htmlcontent;
range.insertNode(el);
rangy.getSelection().setSingleRange(range);
}
alert( document.getElementById('Filearea').innerHTML );
}
new_update元素根本不需要,但它在此阶段起作用。我还可以使用innerHTML
代替document.createDocumentFragment()
吗?然后我如何插入该位置。
答案 0 :(得分:1)
我假设getFirstRange()
来电rangy.getSelection().getRangeAt(0)
?
一个问题是你的文本节点被以下行消灭了,但没有更多的继续(演示页面将是理想的),不可能说出主要问题是什么。一种可能性是range
调用已更改deleteFromDocument()
。我建议在插入节点之前从选择中获取新范围:
function updateNodeAtRange(text, frag) {
var sel = rangy.getSelection();
if (sel.rangeCount > 0) {
var htmlcontent='<span id="AuniqueId" class="style1">'
+frag+'</span><span id="BuniqueId" class="style2">'
+text+'</span>';
sel.deleteFromDocument();
var el = document.createElement("new_update");
el.setAttribute( 'id', 'CuniqueId' );
el.innerHTML = htmlcontent;
var range = sel.getRangeAt(0);
range.insertNode(el);
sel.setSingleRange(range);
}
alert( document.getElementById('Filearea').innerHTML );
}