2016-07-09 5 views
0

Dies ist mein Code, aber es gibt einen Fehler, wenn Sie den markierten Text überschreiben.
Der Fehler ist:Wickeln Sie den Highlight-Text mit span-Element in JQuery oder JavaScript

Uncaught InvalidStateError: Failed to execute 'surroundContents' on 'Range': The Range has partially selected a non-Text node.

JS

function surroundSelection() { 
    var span = document.createElement("span"); 
    span.setAttribute('class', 'hlt') 

    if (window.getSelection) { 
    var sel = window.getSelection(); 
    if (sel.rangeCount) { 
     var range = sel.getRangeAt(0).cloneRange(); 
     range.surroundContents(span); 
     sel.removeAllRanges(); 
     sel.addRange(range); 
    } 
    } 
}  
+1

Was haben Sie mit dem Problem fertig zu werden versucht? Der Fehler ist ziemlich klar: Die Auswahl umfasst Teile eines Knotens, der kein Textknoten ist, und so kann "surroundContents" selbst den Job nicht ausführen. Sie müssen sich ansehen, was sich in dem Bereich befindet, und sich damit befassen, wie Sie das Auswahlquerelement hervorheben. [MDN] (https://developer.mozilla.org/en-US/docs/Web/API/range/surroundContents) zeigt dies sogar an: * "Eine Ausnahme wird ausgelöst, wenn der Bereich einen Textknoten mit nur einem seiner Begrenzungspunkte. "* In diesem Fall benötigen Sie mehr als eine Spanne. –

+0

Ja, ich habe keine Idee, wie es an Element übergeben und das Highlight überschreiben kann. Ja, ich brauche mehr Span-Element dafür. Hoffentlich kann mir jemand helfen. –

+0

Die Arbeit selbst wird die beste Hilfe sein. Ansonsten ist dies nur eine "bitte schreibe das für mich" Anfrage, keine Frage. –

Antwort

0

Versuchen Sie stattdessen:

function surroundSelection() {  
    var selection= window.getSelection().getRangeAt(0); 
    var selectedText = selection.extractContents(); 
    var span= document.createElement("span"); 
    span.setAttribute('class', 'hlt') 
    span.appendChild(selectedText); 
    selection.insertNode(span); 
} 
+0

ist es richtig. aber wenn wir mehrere Absätze haben, funktioniert das nicht richtig. –

Verwandte Themen