2010-11-17 23 views
7

ich ein Eingabeelement haben:Wie füge ich einen Prototyp für ein Eingabeelement hinzu?

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

Ich möchte ein Ich brauche sind selectionStart

document.getElementById("t").selectionStart 

Die Funktionen erstellen:

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; 
} 

Wie kann ich diese "Eigenschaft" in den <input type="text" /> auf IE? Ist es möglich?

Antwort

4

Erstens ist es eine schlechte Idee, sowohl im Prinzip als auch in der Praxis zu versuchen, Host-Objekte zu erweitern. Host-Objekte wie DOM-Elemente können ziemlich genau das tun, was sie wollen; Insbesondere sind sie nicht verpflichtet, das zu unterstützen, was Sie zu tun versuchen, und in IE < = 8, auf das Sie mit diesem Code abzielen, unterstützen DOM-Elemente dies einfach nicht. Sie können entweder eine Funktion verwenden, an die Sie ein Eingabeelement übergeben, oder ein Wrapper-Objekt für jede Eingabe erstellen, die über die erforderlichen Methoden und Eigenschaften verfügt.

Zweitens Ihre GetSelectionStart() und GetSelectionEnd() Funktionen sind fehlerhaft: Sie werden keine neue Linien behandeln richtig in Textbereichen und haben fehlerhafte Logik um lastIndexOf (was ist, wenn der ausgewählte Text mehr als einmal in der Eingabe angezeigt wird?). Ich habe eine Menge Arbeit an diesem Thema geleistet und bin zu dem überzeugenden Ergebnis gekommen, dass es die beste Funktion ist, Eingaben und Textbereiche in allen gängigen Browsern zu finden, die ich vor ein paar Tagen hier gepostet habe: Is it possible to programmatically detect the caret position within a <input type=text> element?

+0

ich gerade versuchte, die verdammt IE zu beheben. Diese Funktionen habe ich gerade aus einem Artikel http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=IE+selectionstart kopiert. Danke, dass Sie auf diese Fehler hingewiesen und eine zuverlässige Funktion bereitgestellt haben. Ich denke, ich habe keine Wahl, ich muss stattdessen eine Methode verwenden ... – BrunoLM

4

Sie wollen die HTMLInputElement Schnittstelle zu erweitern, wie folgt aus:

HTMLInputElement.prototype.selectionStart = … 

jedoch JavaScript-Experten halten dies für eine bad practice.

Verwandte Themen