1

(現在のテキスト フィールドで) 何かが選択されているかどうか (クロスブラウザ) を判断する方法は? trueまたはだけが必要falseです。jQuery.selectionを見つけましたが、私の使用法ではオーバーロードされています。

4

2 に答える 2

3

window.getSelection().toString()あなたのために働くはずです - すべてのブラウザとIE7+でサポートされています

編集:これが入力要素に対して機能しないことに驚いています。ただし、 https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElementselectionStartに記載されているselectionEndプロパティがあるため、代わりにそれらを使用できます。

console.log(!!(el.selectionStart - el.selectionEnd));
// where el = your input element, like el = $('input')[0]

ただし、小さな問題が 1 つあります。テキストを選択した後に入力をぼかしても、これらの値は変わらないことが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 に答える