0

チェックinputFieldDomNode.selectionStartすると、テキスト選択がなく、キャレットがない場合でも、常に何らかの数値が返されます。では、テキスト選択がないかどうかはどうすればわかりますか?

4

4 に答える 4

0

要素がドキュメントのアクティブな要素でない場合、テキストを選択することはできないと思います (ただし、100% 確実ではありません)。次を使用してテストできますdocument.activeElement

if (inputFieldDomNode == document.activeElement) {
    // Do stuff with the selection
}

例: http://jsfiddle.net/hpseuLj3/1/

于 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

ブール値を返します。

それが必要な場合は、http://jsfiddle.net/o5t0ow9g/1/で例を確認してください。

于 2015-02-20T09:53:25.283 に答える