2013-12-11 14 views
6

Sto usando document.getSelection() per selezionare del testo. Vorrei sapere che tipo di elemento contiene l'intervallo selezionato (in particolare voglio vedere se si tratta di un tag di ancoraggio).Ottieni elementi HTML nel range

var selection = document.getSelection(); 
var range = selection.getRangeAt(0); 

Quindi posso ottenere l'intervallo, ma come posso sapere quale elemento è in tale intervallo? Felice di usare plain js o jQuery.

EDIT:

Ecco quello che mi si avvicinò con:

var updateLink = function(url) { 

    var selection = document.getSelection(); 
    var range = selection.getRangeAt(0); 
    if (range != 0) { 
     var containerElement = range.commonAncestorContainer; 
     if (containerElement.nodeType != 1) { 
      containerElement = containerElement.parentNode; 
      var e = $(containerElement); 
      e.attr('href', url); 
     } 

    } 

}//end 
+1

lettura: https://developer.mozilla.org/en-US/docs/Web/API/Selection?redirectlocale=en-US&redirectslug=DOM%2FSelection – diEcho

+1

Provare a utilizzare [longilineo] (https://code.google.com/p/rangy/), rende il lavoro con le selezioni * molto * più semplice. –

risposta

2

Prova questo:

var obj = document.getSelection(); 
var parentNode = $(obj.anchorNode).parent(); 

Ecco jsfiddle

+0

Funziona molto bene. L'ho modificato un po 'per il mio utilizzo, ma esattamente quello di cui avevo bisogno! –

1

È possibile utilizzare cloneContents() metodo:

DEMO

$(document).mouseup(function(){ 
    var range = window.getSelection().getRangeAt(0), 
     selectionContents = range.cloneContents(); 

    alert($(selectionContents.childNodes).filter('a').length); 
});