2016-05-12 15 views
0

Ich versuche, das nächste übergeordnete Element des ausgewählten Textes zu erhalten, es funktioniert, wenn der ausgewählte Text ersetzt wurde nicht, aber es funktioniert nicht nach dem Ersetzen von Text. HierJavascript - Kein Elternteil Ausgewählten Text Holen Sie sich die Auswahl nach dem Austauschen

ist der Code (I aus einer anderen Quelle modifiziert):

jQuery(document).ready(function($){ 
    $("#getparent").on("click touch", function(){ 
     var selection, elements = [], ranges = [], rangeCount = 0, parent_id, parent_class;  
     if (window.getSelection){ 
      selection = window.getSelection(); 
      if (selection.rangeCount) { 
       var i = selection.rangeCount; 
       while (i--) { 
        selectionrange = selection.getRangeAt(i); 
        ranges[i] = selectionrange.cloneRange(); 

        // SELECTION START'S CONTAINER     
        var parentDataStart = selectionrange.startContainer.childNodes[ranges[i].startOffset]; 
        parentDataStart = parentDataStart || selectionrange.startContainer.parentNode; 
        var parentTagStart = parentDataStart.tagName.toLowerCase(); // parent tag name of selection 

        console.log(parentTagStart); 
        alert(parentTagStart); 

        // SELECTED TEXT NODE 
        selectedtext = selection.toString();      
        elements[i] = document.createTextNode(selectedtext); 
        ranges[i].deleteContents(); 
        ranges[i].insertNode(elements[i]); 
        ranges[i].selectNode(elements[i]); 
       } 

       // Restore text selection 
       selection.removeAllRanges(); 
       i = ranges.length; 
       while (i--) { 
        selection.addRange(ranges[i]); 
       } 
      } 
     } 
    }); 
}); 

und hier ist ein Fiddle

DEMO

Antwort

0

der Knoten Auswahlgrenze soll zum Knoten Inhalt verschoben werden . Verwenden Sie stattdessen selectNodeContents.

bei dieser Frage, sollte es sein: ranges[i].selectNodeContents(elements[i]); statt ranges[i].selectNode(elements[i]);

Update:

Fiddle Demo