-1

我已经尝试了几种方法,但就是无法完成。

我正在设计 ul/li 的菜单。我想这样做,如果 a<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,而只会遍历直接后代(子代),所以当我在 li 内部单击更多时,就像#menu-h > li > li, $(this) 值存储它的父级的 DOM 元素。是错误选择器的问题,还是我无法遍历所有后代,只能遍历直接后代?

4

1 回答 1

0

无需遍历每个元素并添加 click 事件处理程序,您可以使用 selector找到所有li具有属性的 s 。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 回答