0

非常に単純な JSFiddle が問題を示しています(問題を示すために使用されるため、デバッグ コンソールを表示する必要がありますconsole.log)。2 番目の console.log ステートメントは空です。elただし、次の行から削除すると、コードは機能します。

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

次のようになります。

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

その後、コードが機能します。これがなぜなのか説明できる人はいますか?行宣言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);
});
4

1 に答える 1

0

すべてのli要素が に設定されdisplay:noneているためel.filter(':visible')、空のコレクションが返されます。ここで問題が発生するかどうかわかりません。

jQuery のメソッドは、フィルターに渡されたセレクターに一致$.filterするコレクション内のすべてのアイテムを返します。したがって、すべてのリスト項目と強力な項目を選択する場合:

$("li, strong");

次に、リスト アイテムのみが含まれるようにフィルター処理します。

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

結果はリスト項目のみになります。あなたの場合、3 つの非表示リスト項目でいっぱいの順序付けられていないリストを作成しました。これらすべてを選択し、それらをフィルタリングして、あるもののみを表示しようとしましたが、CSS で:visibleそれらをすべて非表示にしdisplay:noneたため、結果のコレクションは空になります。

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

于 2012-05-07T19:13:14.377 に答える