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