2012-04-12 43 views
1

我正在選擇一個單詞並嘗試用元素結構替換它。之前我使用的是IE=EmulateIE7,下面的代碼正在工作。由於其他一些問題,我刪除了仿真IE7元,下面的insertNode停止工作。Rangy和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元素並不是必需的,但它在此階段起作用。也可以使用document.createDocumentFragment()來代替innerHTML?那我該如何插入那個位置?

回答

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); 
} 
+0

我改變了'rangy.getSelection()deleteFromDocument()''到range.deleteContents();'它工作得很好。 – Dominic 2012-04-12 10:13:09

+0

@Dominic:是的,那也可以。 – 2012-04-12 14:35:17