3

JavaScriptで汎用ヘルパー関数を書いています。className要素のプロパティにアクセスします。

しかし、私はjQueryを使用しているので、引数として渡される要素が実際には配列(jQueryセット)であることがあります。

引数が要素の場合は引数を使用し、引数がセットの場合はセットから最初の要素を取得する最も簡単な方法は何ですか?jQueryにはこのためのツールがありますか?

4

5 に答える 5

6

あなたはいつもネイティブ要素が欲しいですか?各jQueryオブジェクトには(jQueryバージョンを含む)プロパティがあるjqueryため、これを使用して、取得した要素がjQueryオブジェクトである可能性が高いかどうかを確認できます。

obj = obj.jquery ? obj[0] : obj;

ダックタイピングに興味がない場合:

obj = (obj instanceof jQuery) ? obj[0] : obj;
于 2013-01-07T19:48:05.743 に答える
6

次を使用して、オブジェクトが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
}
于 2013-01-07T19:49:44.677 に答える
1

単一の要素、要素の配列、またはjQueryオブジェクトを同じメソッドに渡す場合は、次の手順を実行します。

function stuff(element) {
    element = [].concat(element)[0];
}
于 2013-01-07T19:50:58.313 に答える
0

jQueryオブジェクトと非jQuery要素の両方を処理する必要がある場合、これは少し難しいです。jQueryコレクションは要素ごとに異なるsを持つ可能性がclassNameあることに注意してください。つまり、最初のコレクションと他のコレクションは同じではない可能性があります。

少し非効率的ですが、これは機能します。

function (obj) {
   var className = $(obj).get(0).className;
}

jQueryオブジェクトをラップしても何も起こりjQuery()ませんが、要素をラップすると、を介してオブジェクトに再度アクセスできます.get$()余分な電話があるかもしれないので、それは非効率的です。

それが良くない場合はobj.hasOwnProperty('className')、jQueryオブジェクトには通常それがないはずなので確認できますが、それはリスクが高いと思います。

于 2013-01-07T19:51:31.557 に答える
0

jQueryオブジェクトは要素または要素の配列ですか?

厳密にはどちらでもありません。

jQuery オブジェクトは、いくつかの配列機能を持つ Javascript オブジェクトです。ほとんどの場合、要素の配列として使用できます。


jQuery オブジェクトに複数の要素が含まれている可能性があり、最初の要素のみが必要な場合は、firstメソッドを使用してそれを取得できます。

elements = elements.first();

パラメータが要素、要素の配列、または jQuery オブジェクトのいずれかである場合、すべてのケースを処理するために jQuery オブジェクトでラップできます。

elements = $(elements).first();
于 2013-01-07T19:54:37.350 に答える