如果选择任何内容,如何确定(跨浏览器)?

时间:2013-11-14 13:31:26

标签: javascript html html5

如果选择了任何内容(在当前文本字段中),如何确定(跨浏览器)?我只需truefalse。我找到了jQuery.selection,但是因为我的使用而超负荷。

2 个答案:

答案 0 :(得分:3)

window.getSelection().toString()应该适合您 - 所有浏览器和IE7 +

都支持

编辑:我很惊讶这对输入元素不起作用。但是https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement提到了selectionStartselectionEnd属性,因此您可以使用它们。

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

答案 1 :(得分: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;

即可
相关问题