2

私は次のことを持っています。誰かが助けてくれれば素晴らしいと思います..

    $(".brand-nav").click(function(e){
        var type = $(this).attr( id );
        $('.article').hide();
        $('.' + type).show();            
        e.preventDefault();            
        $(".letter-section").each(function (i) {
            var siblings = $(i).siblings(":visible").length;
            if (siblings == 0) {
                $(i.big-lettter').hide();
            } else {
                $(i.big-lettter').show();
            }
        }
    });

私はこの JS フィドルを作成して、HTML のアイデアも含めました: http://jsfiddle.net/BEa4x/ここに投稿したとき、正しくフォーマットされませんでした。

トップ メニューをクリックすると、すべてのリンクが非表示になり、リンクの ID によって関連するリンクのみが表示されます。

次に、「A」セクションにリンクが表示されないことを意味する食品をクリックすると、A も非表示にする必要があります。それ以外の場合は、表示する必要があります。

どんな助けでも感謝します:-)

4

2 に答える 2

3

OK、そこにはいくつかの構文エラーがあります...そしていくつかの論理エラーがあります。これを試して:

 $(".brand-nav").click(function(e) {
     var type = $(this).attr('id'); // id needs quotes
     $('.article').hide();
     $('.' + type).show();            
     e.preventDefault();            
     $(".letter-section").each(function (i) {
         var siblings = $(this).find('li').filter(':visible'); // i is the index, "this" is the actual DOM element. Also you need the descendants 'li', not his siblings
         if (siblings.size() == 0) {
             $(this).children('.big-letter').hide(); // again, use "this" and get the children (you may want to filter the first also).
         }
         else {
             $(this).children('.big-letter').show(); // remember to show again or it will stay hidden :)
         }
     }); // you also forgot to close this bracket
 });

フィドル: http://jsfiddle.net/BEa4x/21/

于 2012-10-23T10:43:37.370 に答える
0
$(document).ready(function() {
    $(".brand-nav").click(function(e){
        e.preventDefault();            

        // Note that id has to be quoted here.
        var kind = $(this).attr('id');

        // First of all show all the letters
        // in case they had been hidden previously
        $('.letter-section').show();

        // Hide all the articles and only show the ones that
        // match the id of the element that's been clicked on.
        $('.article').hide();
        $('.' + kind).show();

        // For each letter section...
        $('.letter-section').each(function(index, element) {
            // Check if its visible li count is 0
            if ($(element).contents('li:visible').length == 0) {
              // If it is, hide the letter!
              $(element).hide();   
            }
        });
    });    
});

ここで動作することがわかります: http://jsfiddle.net/BEa4x/23/

これはあなたのコードの非常に迅速で汚い修正です。私があなただったら、文字セクションの内容チェックを独自の関数に入れることから始めてリファクタリングします。

于 2012-10-23T10:53:19.527 に答える