当前唯一允许安全选择文本的元素是:
<input type="text|search|password|tel|url">
如以下内容所述:
whatwg:selectionStart属性。
您也可以阅读HTMLInputElement接口的文档,以仔细了解输入元素。
为了安全地克服此“问题”,目前最好的方法是处理<input type="text">
并应用仅接受数字的掩码/约束。周围有一些插件可以满足要求:
您可以在此处查看上述插件之一的实时演示:
如果要安全使用selectionStart
,则可以检查支持它的那些元素(请参阅输入类型属性)
实作
var _fixSelection = (function() {
var _SELECTABLE_TYPES = /text|password|search|tel|url/;
return function fixSelection (dom, fn) {
var validType = _SELECTABLE_TYPES.test(dom.type),
selection = {
start: validType ? dom.selectionStart : 0,
end: validType ? dom.selectionEnd : 0
};
if (validType && fn instanceof Function) fn(dom);
return selection;
};
}());
function getCaretPosition (dom) {
var selection, sel;
if ('selectionStart' in dom) {
return _fixSelection(dom).start;
} else {
selection = document.selection;
if (selection) {
sel = selection.createRange();
sel.moveStart('character', -dom.value.length);
return sel.text.length;
}
}
return -1;
}
用法
var box = document.getElementById("price"),
pos = getCaretPosition(box);
console.log("position: ", pos);
上面的示例可以在这里找到:jsu.fnGetCaretPosition()