2010-11-17 7 views
7

que tienen un elemento de entrada:¿Cómo agregar un prototipo para un elemento de entrada?

<input type="text" id="t" value="abcdefghij" /> 

que desea crear un selectionStart

document.getElementById("t").selectionStart 

Las funciones que necesito son:

function GetSelectionStart(o) { 
    if (o.createTextRange) { 
     var r = document.selection.createRange().duplicate() 
     r.moveEnd('character', o.value.length) 
     if (r.text == '') return o.value.length 
     return o.value.lastIndexOf(r.text) 
    } else return o.selectionStart; 
} 

function GetSelectionEnd(o) { 
    if (o.createTextRange) { 
     var r = document.selection.createRange().duplicate() 
     r.moveStart('character', -o.value.length) 
     return r.text.length 
    } else return o.selectionEnd; 
} 

¿Cómo puedo añadir esta "propiedad" de <input type="text" /> en IE? ¿Es posible?

Respuesta

4

En primer lugar, es una mala idea, tanto en principio como en la práctica, tratar de extender objetos host. Los objetos host como los elementos DOM pueden hacer prácticamente lo que les gusta; en particular, no están obligados a respaldar lo que estás tratando de hacer y en IE < = 8, que es lo que apuntas con este código, los elementos DOM simplemente no son compatibles. Sus opciones son utilizar una función a la que pasa un elemento de entrada o crear un objeto contenedor para cada entrada que tenga los métodos y las propiedades que necesita.

En segundo lugar, sus GetSelectionStart() y GetSelectionEnd() funciones son erróneas: no van a manejar las nuevas líneas correctamente en las áreas de texto y tienen una lógica defectuosa en torno lastIndexOf (¿y si el texto seleccionado aparece más de una vez en la entrada?). He trabajado bastante en esto, y he llegado a la conclusión de que estoy bastante convencido de que es la mejor función para obtener las selecciones de entrada y texto en todos los principales navegadores, que publiqué aquí hace un par de días: Is it possible to programmatically detect the caret position within a <input type=text> element?

+0

yo sólo estaba tratando de arreglar el maldito IE. Esas funciones que acabo de copiar de algún artículo http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=IE+selectionstart. Gracias por señalar estos defectos y por proporcionar una función confiable. Supongo que no tengo otra opción, tendré que usar un método en su lugar ... – BrunoLM

4

Usted querrá ampliar la interfaz HTMLInputElement, así:

HTMLInputElement.prototype.selectionStart = … 

Sin embargo, los expertos consideran esto una de JavaScript bad practice.

Cuestiones relacionadas