あなたはそのためのセレクタを必要としません。あなたはいつもdocument
でそれを参照しています。
document.addEventListener("keypress", handler);
あなたがHTML
要素が必要な場合は、"html"
セレクタを使用することができます。
document.querySelector("html").addEventListener(...)
またはdocument.documentElement
を使用してください。
document.documentElement.addEventListener(...)
そして@cepharumが述べたように、あなたは$
関数に要素またはセレクタを渡すことによって、jQueryを使って同じことを行うことができます。 document
が常に利用可能である間、体が完全にロードされるまで
あなたの更新の質問にいくつかの注意は、document.body
はそうではありません。代わりにdocument
を使用できるはずです。
また、イベントハンドラにreturn文があります。それは何か有用なことをするつもりはありません。戻り値は無視されます。
最後に、ユーザーがドキュメント内のどこかのキーを押したときにコールする必要がある場合は、コールバックを一致するセレクタに制限したいとは思われません。それは干渉するように見えるだけです。
セレクタベースのイベント委任を希望する場合は、ほとんどの場合です。 event.target
の親ノードを通過してセレクタと一致するものがあるかどうかを確認し、それらに対してハンドラを実行したいと思う可能性が最も高いでしょう。
export function listen(eventName, selector, handler) {
document.body.addEventListener(eventName, event => {
var el = event.target;
do {
if (el.matches(selector)) {
handler(event);
}
} while((el = el.parentNode));
});
}
あなただけそれがhandler
呼び出しの後return
かbreak
を追加し、最初に見つかったマッチのために解雇したい場合。
または、jQueryを操作するときに '$(document).on("、 "handler"をクリック)を使用してください。 – cepharum
私は自分の質問を編集しました。本当にやりたいことではありませんが、とにかく感謝します。 – dbrrt
@dbrrt:あなたが何を意味しているかわかりません。あなたは 'document'のどこにでもそのイベントを捕まえたいと思うようです。なぜあなたはセレクターが必要だと思いますか?実際にjQueryのような委任をしようとしていますか?もしそうなら、答えもありますが、あなたが本当に望むものについての詳細を述べる必要があります。 – spanky