2012-05-07 21 views
0

Very simple JSFiddle demonstrates the problem(問題を示すためにconsole.logが使用されているため、デバッグコンソールを表示する必要があります)。 2番目のconsole.logステートメントは空です。それはなるようにコンテキスト要素が指定されているとjqueryフィルタが機能しない

var items = $('li[data-level="2"]', el);

var items = $('li[data-level="2"]');

その後、コードは動作します、私は次の行からelを削除する場合は、コードは動作します。誰がこれがなぜなのか説明できますか? elを宣言行が欠落していることになる理由を知りません、それはJSFiddleに私のために見せていますが、ここでは、JavaScriptのパネル内のすべてのコードがあります:

$(document).ready(function() { 
    var el = $('ul'); 
    var items = $('li[data-level="2"]', el); 
    console.log(items); 
    var visible = items.filter(':visible'); 
    console.log(visible); 
}); 
+1

削除する前に 'el'とは何ですか? – Esailija

+0

'el'を使う必要があるか、' el'を使う必要はありませんか?私は問題が何であるか混乱している。 – j08691

+0

私は文脈の有無にかかわらず同じ結果を得ています。 2番目のログでは可視要素が吐き出されますが、これはCSSですべて隠してしまったためです。 – Sampson

答えて

0

あなたはあるdisplay:noneに設定liのすべての要素を、持っていますなぜel.filter(':visible')が空のコレクションを返します。 の問題が表示されているかどうかわかりません。

jQueryのメソッドは、が一致するすべての項目を返します。セレクタがフィルタに渡されました。

$("li, strong"); 

そして、我々は唯一のリスト項目を持つようにそれをフィルタリング:我々は、すべてのリスト項目、および強力な項目を選択していたのであれば

$("li, strong").filter("li"); 

私たちの結果はリスト項目になります。あなたのケースでは、3つの隠しリスト項目が充足された順序付けられていないリストを作成しました。これらのすべてを選択してから、フィルタリングして:visibleのものだけを表示しようとしましたが、CSSにdisplay:noneをすべて隠してしまったため、結果のコレクションは空になります。

jQueryは期待どおりに動作します。

+0

ああ、申し訳ありません、私の問題を作り直すのに大変な時間があります。しかし、ついにそれを管理しました。私が経験していた問題は、たとえばthis.model.trigger( 'change:title'); 'のようなモデルでtrigger()を呼び出し、可視性によってフィルタリングすることでした。私は 'トリガ'が非同期であることを認識していなかったので、フィルタリングを行ったコードは可視性を更新するメソッドの前に実行されました! – Jack

関連する問題