2009-04-03 7 views
26

Sto avendo questo fastidioso problema, io non riesco a ottenere l'inizio e la fine dell'indice del testo selezionato in una textarea, tutto quello che ottiene è definito in questo modo:selectionStart-end con textareas

$('#myarea').selectionStart; // return undefined 

Ho fatto qualcosa di sbagliato?

risposta

70

Prova:

$('#myarea')[0].selectionStart; 

Perché? Un selettore jQuery non restituisce gli effettivi elementi DOM ma la raccolta jQuery completata. jQuery rende gli elementi DOM reali accessibili come una matrice, quindi se si volesse utilizzare il 1 ° elemento abbinato (e in questo caso, l'unico, dato che è per ID), si farebbe quanto sopra.

+8

Holy crap utile la conoscenza oscura! Grazie – MrBrightside

+2

Questo è stato l'ultimo pezzo del mio puzzle JS mattutino. Signore, sei un risparmiatore di vita! A proposito, per chiunque voglia utilizzare questo per sostituire automaticamente determinati caratteri in un campo di input mantenendo la posizione del cursore: ricordarsi di applicare anche [0] al proprio "setSelectionRange". – Raymond

2

Per la gestione selezioni di testo vivamente vi consiglio il fieldSelection plugin

+2

dove posso trovare qualche documentazione fieldSelection? – kmunky

+1

Nota che il plug-in si è modificato e abbandonato, al momento: https://github.com/localhost/jquery-fieldselection – PicoCreator

0

un altro plugin è possibile utilizzare, e l'unico che io sappia che gestisce correttamente interruzioni di riga in IE, è la mia Rangy Inputs plugin.

9

Dal jQuery versione 1.6, è possibile utilizzare il metodo .prop():

Get:

// always start at 0 

var start = $('#myarea').prop('selectionStart'); 
var end = $('#myarea').prop('selectionEnd'); 

Set:

$('#myarea').prop('selectionStart', 10); 
$('#myarea').prop('selectionEnd', 15); 

// or short hand by 

$('#myarea').prop({ 
    'selectionStart': 10, 
    'selectionEnd': 15 
}); 
+1

Non vuoi essere invadente, ma quali vantaggi ha sulla proprietà nativa? O.o Non ci sono problemi di compatibilità con quello nativo e vedo solo che è ancora più lungo e sicuramente anche più lento .. – Dennis98

Problemi correlati