チェックinputFieldDomNode.selectionStart
すると、テキスト選択がなく、キャレットがない場合でも、常に何らかの数値が返されます。では、テキスト選択がないかどうかはどうすればわかりますか?
4 に答える
0
要素がドキュメントのアクティブな要素でない場合、テキストを選択することはできないと思います (ただし、100% 確実ではありません)。次を使用してテストできますdocument.activeElement
。
if (inputFieldDomNode == document.activeElement) {
// Do stuff with the selection
}
于 2015-02-20T21:14:14.697 に答える
0
わかりました:
exports.getSelectionRange = function (element) {
if(element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {
var selection = window.getSelection()
for(var n=0; n<selection.rangeCount; n++) {
var range = selection.getRangeAt(0)
if(range.startOffset === range.endOffset && range.startContainer.children[range.startOffset] === element /*|| range.startContainer === element || */) { // I don't think the input or textarea itself will ever be the startContainer
return [element.selectionStart, element.selectionEnd]
}
}
// else return undefined - the element doesn't have an active caret or active selection (it still may have an inactive selection)
} else {
// .. do something else unrelated to this question
}
}
基本的に、アクティブなテキスト入力がある場合、その親は であるrange.startContainer
ため、それが の子であることを確認するだけでなく、によって決定される正しい子 (選択されている子) であるrange.startContaine
ことを確認する必要があります。また、入力がより大きな選択に含まれる可能性があるため、入力が選択されている唯一のものであることを確認する必要があります。range.startOffset
注:実際の入力ノードが選択された唯一のものであり、その内容ではない場合、これはまだ失敗する可能性があると思います。これは信じられないほどまれなエッジケースであり、ユーザー入力を介して可能であるかどうかはわかりません (おそらく dom API を介して可能です)。
于 2015-02-20T22:48:35.187 に答える
0
次のような方法で要素が選択されているかどうかを確認できます。
document.getElementById("color-red").checked
ブール値を返します。
于 2015-02-20T09:53:25.283 に答える