我通过一些jQuery函数进行动画导航。这一切都很好,但有一件事让我发疯。最后一项(项目nb.5)应该将您重定向到新页面但不会发生。我在下面的前几行代码中有条件
$(document).ready(function(){
$('li > a').on('click', function(e) {
if ($(this).parent().has('p')) {
e.preventDefault();
}
if (!$(this).hasClass('active')) {
$('li a').next('p').stop().slideUp();
$(this).next('p').stop().slideDown();
$('li a').removeClass('active');
$(this).addClass('active');
}
else if ($(this).hasClass('active')) {
$(this).next('p').stop().slideUp();
$(this).removeClass('active');
}
})
})
答案 0 :(得分:4)
has(selector)
描述:将匹配元素集减少到具有与选择器或DOM元素匹配的后代的元素。
返回:jQuery
.has()
返回一个jQuery对象。
使用.find('p').length
或.has('p').length
代替.has('p')
:
$(document).ready(function(){
$('li > a').on('click', function(e) {
if ($(this).parent().find('p').length) {
e.preventDefault();
}
if (!$(this).hasClass('active')) {
$('li a').next('p').stop().slideUp();
$(this).next('p').stop().slideDown();
$('li a').removeClass('active');
$(this).addClass('active');
}
else if ($(this).hasClass('active')) {
$(this).next('p').stop().slideUp();
$(this).removeClass('active');
}
});
});
答案 1 :(得分:1)
.has()
返回一个jQuery对象而不是布尔值
只需改变你的if:
if (!($(this).hasClass("odkaz"))) {
e.preventDefault();
}
CODE:
$(document).ready(function(){
$('li > a').on('click', function(e) {
if (!($(this).hasClass("odkaz"))) {
e.preventDefault();
}
if (!$(this).hasClass('active')) {
$('li a').next('p').stop().slideUp();
$(this).next('p').stop().slideDown();
$('li a').removeClass('active');
$(this).addClass('active');
}
else if ($(this).hasClass('active')) {
$(this).next('p').stop().slideUp();
$(this).removeClass('active');
}
})
})
答案 2 :(得分:1)
.has()
没有返回布尔值。它返回一个jQuery对象。来自文档:
将匹配元素集减少到具有与选择器或DOM元素匹配的后代的元素。
所以,你需要做类似的事情:
if($(this).parent().has('p').length)
或者更好的是,您不需要遍历父母来追溯。只需简单地做:
if($(this).siblings('p').length)