Rangy和InsertNode问题

时间:2012-04-12 05:32:46

标签: dom rangy

我正在选择一个单词并尝试用元素结构替换它。之前我使用的是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()吗?然后我如何插入该位置。

1 个答案:

答案 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 );
}