如何确定(跨浏览器)是否选择了任何内容(在当前文本字段中)?我只需要一个true
or false
。我找到了jQuery.selection,但它对我的使用来说已经超载了。
问问题
66 次
2 回答
3
window.getSelection().toString()
应该适合你 - 所有浏览器和 IE7+ 都支持
编辑:我很惊讶这不适用于输入元素。但是,https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement 中提到了一些selectionStart
属性,selectionEnd
因此您可以使用它们。
console.log(!!(el.selectionStart - el.selectionEnd));
// where el = your input element, like el = $('input')[0]
不过有一个小故障,我发现如果在选择文本后模糊输入,这些值不会改变,所以我将利用它querySelector
来查找输入元素是否具有焦点:
document.querySelector('#input:focus') //returns first matched element or null
于 2013-11-14T13:36:54.120 回答
0
最简单和最可靠的(我猜)是从 jQuery.selection 插件中获取代码。您将只需要此功能:
var _getCaretInfo = function(element){
var res = {
text: '',
start: 0,
end: 0
};
if (!element.value) {
/* 値がない、もしくは空文字列 */
return res;
}
try {
if (win.getSelection) {
/* IE 以外 */
res.start = element.selectionStart;
res.end = element.selectionEnd;
res.text = element.value.slice(res.start, res.end);
} else if (doc.selection) {
/* for IE */
element.focus();
var range = doc.selection.createRange(),
range2 = doc.body.createTextRange(),
tmpLength;
res.text = range.text;
try {
range2.moveToElementText(element);
range2.setEndPoint('StartToStart', range);
} catch (e) {
range2 = element.createTextRange();
range2.setEndPoint('StartToStart', range);
}
res.start = element.value.length - range2.text.length;
res.end = res.start + range.text.length;
}
} catch (e) {
/* あきらめる */
}
return res;
};
如果不需要 IE8< 支持 -if (doc.selection) {
可以删除部分。
要从此函数中获取布尔值,只需替换return res;
为return !!res.text;
于 2013-11-14T15:08:35.423 回答