-1

私はそれを行ういくつかの方法を試しましたが、それを成し遂げることができません。

ul/li'sのメニューデザインをしています。<li>href 属性がある場合、jQueryがイベントを作成して、属性が格納されているサイトにリダイレクトするようにしたいと思います。しかし、href がない場合は何も起こりません。問題は、いくつかのliをクリックしているときに、同じブランチにあるものもイベントを取得していることです

$("#menu-h > li li").each(function() {

      if($(this).attr("href")) {
           $(this).click(function() {
                window.location = $(this).attr("href");
                return false;
           });
      }
});

それはeach()すべての 'li's after#menu-h > liではなく、直接の子孫 (子) でのみ繰り返されるよう#menu-h > li > liです。それは間違ったセレクターの問題ですか、それともすべての子孫を反復処理できず、直接の子孫のみを反復処理できませんか?

4

1 に答える 1

0

各要素を繰り返し処理してクリックイベントハンドラーを追加する必要はありません。セレクターを使用して、属性をli持つすべてのを見つけることができます。hrefli[href]

$(function(){
    $("#menu-h li[href]").click(function() {
        if($(this).attr("href")) {
            window.location = $(this).attr("href");
            return false;
        }
    });
});

より良い解決策は、イベント委任を使用することです

$("#menu-h").on('click', 'li[href]', function() {
    if($(this).attr("href")) {
        window.location = $(this).attr("href");
        return false;
    }
});
于 2013-03-19T07:42:47.323 に答える