2009-04-03 20 views
26

estoy teniendo este problema molesto, me parece que no puede obtener el índice de inicio y final del texto seleccionado en un área de texto, todo lo que consigo no está definida así:selectionStart-End, con áreas de texto

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

¿Hice algo mal?

Respuesta

70

Probar:

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

¿Por qué? Un selector jQuery no devuelve los elementos DOM reales, sino la colección jQuery envuelta. jQuery hace que los elementos DOM reales sean accesibles como una matriz, por lo que si quisieras usar el primer elemento emparejado (y en este caso, el único, ya que es por ID), harías lo anterior.

+8

Mierda oscuro conocimiento útil! Gracias – MrBrightside

+2

Esta fue la última pieza de mi rompecabezas JS por la mañana. Usted señor, es un salvavidas! Por cierto, para cualquiera que quiera usar esto para reemplazar automáticamente ciertos caracteres en un campo de entrada mientras se mantiene la posición de intercalación: recuerde aplicar también [0] a su "setSelectionRange". – Raymond

2

Para la gestión de las selecciones de texto le recomiendo el fieldSelection plugin

+2

¿dónde puedo encontrar alguna documentación de fieldSelection? – kmunky

+1

Tenga en cuenta que el complemento se ha cambiado y se ha abandonado, actualmente se encuentra en: https://github.com/localhost/jquery-fieldselection – PicoCreator

0

otro plugin se puede utilizar, y el único que soy consciente de que maneja correctamente los saltos de línea en el IE, es mi propia Rangy Inputs plugin.

9

Desde jQuery versión 1.6, puede utilizar el método .prop():

Obtener:

// 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

No quiero ser insistente, pero ¿qué ventajas tiene esto sobre la propiedad nativa? O.o No hay problemas de compatibilidad con el nativo y solo lo veo más largo y seguramente también más lento ... – Dennis98

Cuestiones relacionadas