如何为输入元素添加原型?

Bru*_*oLM 7 javascript internet-explorer dom prototype

我有一个输入元素:

<input type="text" id="t" value="abcdefghij" />
Run Code Online (Sandbox Code Playgroud)

我想创建一个 selectionStart

document.getElementById("t").selectionStart
Run Code Online (Sandbox Code Playgroud)

我需要的功能是:

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;
}
Run Code Online (Sandbox Code Playgroud)

如何<input type="text" />在IE上添加此"属性" ?可能吗?

Tim*_*own 4

首先,尝试扩展宿主对象在原则上和实践中都是一个坏主意。诸如 DOM 元素之类的宿主对象几乎可以做他们喜欢做的事情;特别是,它们没有义务支持您想要做的事情,并且在 IE <= 8 中(这就是您使用此代码的目标),DOM 元素根本不支持这一点。您的选择是使用向其传递输入元素的函数,或者为每个具有所需方法和属性的输入创建一个包装器对象。

其次,您的GetSelectionStart()GetSelectionEnd()函数存在缺陷:它们无法正确处理文本区域中的新行,并且逻辑错误lastIndexOf(如果所选文本在输入中出现多次怎么办?)。我在这方面做了很多工作,并提出了我相当确信的在所有主要浏览器中获取输入和文本区域选择的最佳功能,这是我几天前最后发布的:是否可以以编程方式检测 <input type=text> 元素中的插入符位置?