2012-03-27 17 views
1

jQueryのconstructorは要素の配列を受け入れることができます。jQuery(elementArray) - 配列項目の子のみを選択します

elementArrayパラメータの使用法を誤解していますか、これはjQueryバグですか?

適用される選択子は、すべてになります。配列内のアイテムまたはアイテムの子であるHTMLElements。ただし、配列項目ののみを選択しているようです。

たとえば、次の内容の配列では、要素がクラスtopLevelDivまたはtopLevelSpanと一致しません。

elementArray[0] contains 
    <div class="topLevelDiv"> 
     <span class="childSpan"></span><div class="childDiv"></div> 
    </div> 
elementArray[1] contains 
    <span class="topLevelSpan"> 
     <span class="childSpan"></span> 
    </span> 

これは、ここで

$('div', elementArray) 
// OR 
$(elementArray).find('div') 

)elementArrayがコンテキストとしてまたは(ラップと見つける呼び出すためのオブジェクトとして使用されているかどうかを真でデモンストレーションです: http://jsfiddle.net/A49VV/1/

+0

http://jsfiddle.net/A49VV/1/:jsこれは使用する方法を示しています。 – Blazemonger

+0

@ mblase75:lolは同じことを考えていました:) – mellamokb

+0

これは実際には**ドキュメントを読んで**答えられたかもしれない質問のようです。 –

答えて

1

jQueryのとして働いていますfindを実行するか、コンテキストの2番目のパラメータを指定すると、内にあり、必要な要素が指定されています。 elementArrayのトップノードでフィルタリングする場合は、filter関数を使用する必要があります。

+0

私はフィルタで読み取ったものから、jQueryオブジェクトを受け取ります。プレーンな配列ではありません。 [htmlElement、htmlElement ...]。 –

+1

'$(elementArray)' *は* jQueryオブジェクトです。 '$(elementArray).find( 'div')の代わりに' $(elementArray).filter( 'div') 'を呼び出すと、期待どおりに動作することがわかります。おかげさまで – mellamokb

0

jQuery(elementArray)は、配列内のすべての要素を持つjQueryオブジェクトを作成します。そのjQueryオブジェクトに適用する操作は、配列内のすべての要素に適用されます。

だから、あなたがしなければ、この:

jQuery(elementArray).css("color", "red"); 

それはすべてのこれらの要素のテキスト赤に変わります。これらの特定の要素にjQuery操作が適用されます。これらの要素の子には直接適用されません。子どもに影響を与えるかどうかは、操作の内容によって異なります。これはjQueryが設計されたためです。

jQuery(elementArray)を実行したときにセレクターが含まれていないため、「適用されているセレクター」とは何を意味するのか不明です。

jQuery(elementArray)jQuery(elementArray).filter(selector)でフィルタリングすることができ、セレクタと一致しない配列の要素がjQueryオブジェクトから削除されます。

のように.find()を使用できます。これにより、セレクタに一致する子孫のelementArrayの各要素の子孫が検索され、見つかったすべての子孫が返された新しいjQueryオブジェクトに配置されます。

+0

フィルタリングして、一致するセットを生成します。 '$(elementArray).filter( 'div')'は '[div.childDiv]'を生成し、 '$(elementArray).filter( 'div')'は '[div.topLevelDiv]'を生成します。私はXPath PathExpr '//'のようなものを探していましたが、これは2つのセットを組み合わせる '任意のレベルで'を選択します。 –

+0

@Monte、あなたがやろうとしているものとまったく同じものになることを望んでいるという理由で、何をしようとしているのかを私に明確にしたことはありませんでした。 2つの異なる選択を組み合わせたい場合は、 '.add()'メソッドを使って新しい要素を既存のjQueryオブジェクトに追加したり、2つのjQueryオブジェクトを結合したり、新しいセレクタ操作の結果を既存のjQueryオブジェクトに追加したりできます。 – jfriend00

関連する問題