我尝试了几种方法,但是无法完成它。
我正在设计ul / li的菜单。我希望如果<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()
不会在#menu-h > li
之后迭代所有'li',而只会在直接后代(子)上迭代,所以当我在li里面点击更多时,如{{1} },$(this)值存储其父元素的DOM元素。这是错误选择器的问题,还是我不能迭代所有后代,只有直接的后代?
答案 0 :(得分:0)
无需遍历每个元素并添加点击事件处理程序,您可以使用选择器li
查找具有href
属性的所有li[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;
}
});