2011-10-23 13 views
5

Posso interrogare (in un senso jQuery) gli elementi DOM - non solo nodi di testo - completamente selezionati dal mouse?Edificio a: selettore di selezione

+0

Cosa significa "evidenziare" esattamente? E, ancora di più, cosa significa "evidenziare parzialmente"? – Jon

+0

Dai un'occhiata a questo: http://stackoverflow.com/questions/7803016/how-to-wrap-html-tag-for-jquery-mouseup-selection-wrods/7803559#7803559 –

+1

@Randomblue "selected" è il termine più familiare per quello ... –

risposta

2

Questo ti porterà tutti gli elementi che sono completamente selezionati:

var currentSelection = window.getSelection(); 
var firstRangeInSelection = currentSelection.getRangeAt(0); 
var commonAncestor = firstRangeInSelection.commonAncestorContainer; 

var nodesInSelection = $(commonAncestor).find("*").filter(function() { 
          return currentSelection.containsNode(this, false); 
         }); 

Per ulteriori informazioni su Dom Selezioni, controlla this page.

+0

+1, anche se sarebbe migliorato con alcuni controlli: primo, IE <9 non supporta 'window.getSelection()' quindi dovresti controllare l'esistenza di quello; secondo, 'getRangeAt (0)' genererà un errore se non è selezionato nulla, quindi dovresti controllare che 'currentSelection.rangeCount' sia maggiore di zero. –

+0

In realtà, cosa succede se la selezione è completamente contenuta all'interno di un singolo nodo di testo? Presumo che otterrai un oggetto jQuery vuoto. –

1

Si potrebbe adattare la mia risposta alla seguente domanda per restituire un oggetto jQuery, piuttosto che una matrice, che dovrebbe essere semplice:

JS: Get array of all selected nodes in contentEditable div

Tuttavia, questo non funzionerà in IE < 9, che non supporta lo stesso oggetto Selection come altri browser. Per questo, avrai bisogno di un altro approccio. C'è la mia libreria Rangy, come menzionato in quella risposta, ma se hai bisogno di supporto IE < 9 senza una libreria, allora posso battere qualcosa insieme.

+0

Cosa intendi con "piuttosto che con un array"? La mia soluzione restituisce anche un oggetto jQuery. Scusa se non stavi parlando di me :) –

+0

@Chris: non mi riferivo alla tua risposta. Avevo pensato che l'OP avrebbe voluto una collezione jQuery piuttosto che una matrice, che è ciò a cui produce la risposta che ho collegato. –