1

我正在选择一个单词并尝试用元素结构替换它。早些时候我正在使用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()吗?那么我如何插入该位置。

4

1 回答 1

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 );
}
于 2012-04-12T09:05:50.610 回答