2012-04-12 3 views
1

Ich wähle ein Wort und versuche, es durch eine Elementstruktur zu ersetzen. Früher habe ich IE=EmulateIE7 verwendet und der folgende Code funktionierte. Wegen einiger anderer Probleme habe ich das Emulate IE7 Meta entfernt und der insertNode funktioniert nicht mehr.Rangy und InsertNode Problem

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

Das Element new_update ist überhaupt nicht erforderlich, aber es funktioniert in diesem Stadium. Auch anstelle von innerHTML kann ich document.createDocumentFragment()?. Dann wie füge ich an dieser Stelle ein.

Antwort

1

Ich gehe davon aus getFirstRange() Anrufe ?

Ein Problem ist, dass Ihr Text-Knoten durch die folgende Zeile gelöscht wird, aber ohne mehr zu gehen (eine Demoseite wäre ideal), ist es unmöglich zu sagen, was das Hauptproblem ist. Eine Möglichkeit ist, dass range durch den Aufruf deleteFromDocument() geändert wurde. Ich würde Ihnen raten, eine neue Reihe von der Auswahl bekommen, bevor Sie den Knoten Einfügen:

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

Ich änderte 'rangy.getSelection() deleteFromDocument()' auf 'range.deleteContents();' und es funktionierte gut.. – Dominic

+0

@Dominic: Ja, das würde auch funktionieren. –