JavaScriptで汎用ヘルパー関数を書いています。className
要素のプロパティにアクセスします。
しかし、私はjQueryを使用しているので、引数として渡される要素が実際には配列(jQueryセット)であることがあります。
引数が要素の場合は引数を使用し、引数がセットの場合はセットから最初の要素を取得する最も簡単な方法は何ですか?jQueryにはこのためのツールがありますか?
JavaScriptで汎用ヘルパー関数を書いています。className
要素のプロパティにアクセスします。
しかし、私はjQueryを使用しているので、引数として渡される要素が実際には配列(jQueryセット)であることがあります。
引数が要素の場合は引数を使用し、引数がセットの場合はセットから最初の要素を取得する最も簡単な方法は何ですか?jQueryにはこのためのツールがありますか?
あなたはいつもネイティブ要素が欲しいですか?各jQueryオブジェクトには(jQueryバージョンを含む)プロパティがあるjquery
ため、これを使用して、取得した要素がjQueryオブジェクトである可能性が高いかどうかを確認できます。
obj = obj.jquery ? obj[0] : obj;
ダックタイピングに興味がない場合:
obj = (obj instanceof jQuery) ? obj[0] : obj;
次を使用して、オブジェクトがjQueryオブジェクトであるかどうかをテストできますinstanceof
。
if (myObject instanceof jQuery) {
// use $.each to loop over myObject and get class names of all
// or just use myObject[0].className to return only the first
} else {
// it's not a jQuery object
}
単一の要素、要素の配列、またはjQueryオブジェクトを同じメソッドに渡す場合は、次の手順を実行します。
function stuff(element) {
element = [].concat(element)[0];
}
jQueryオブジェクトと非jQuery要素の両方を処理する必要がある場合、これは少し難しいです。jQueryコレクションは要素ごとに異なるsを持つ可能性がclassName
あることに注意してください。つまり、最初のコレクションと他のコレクションは同じではない可能性があります。
少し非効率的ですが、これは機能します。
function (obj) {
var className = $(obj).get(0).className;
}
jQueryオブジェクトをラップしても何も起こりjQuery()
ませんが、要素をラップすると、を介してオブジェクトに再度アクセスできます.get
。$()
余分な電話があるかもしれないので、それは非効率的です。
それが良くない場合はobj.hasOwnProperty('className')
、jQueryオブジェクトには通常それがないはずなので確認できますが、それはリスクが高いと思います。
jQueryオブジェクトは要素または要素の配列ですか?
厳密にはどちらでもありません。
jQuery オブジェクトは、いくつかの配列機能を持つ Javascript オブジェクトです。ほとんどの場合、要素の配列として使用できます。
jQuery オブジェクトに複数の要素が含まれている可能性があり、最初の要素のみが必要な場合は、first
メソッドを使用してそれを取得できます。
elements = elements.first();
パラメータが要素、要素の配列、または jQuery オブジェクトのいずれかである場合、すべてのケースを処理するために jQuery オブジェクトでラップできます。
elements = $(elements).first();