Javascript 仅使用jQuery将return false添加到父链接
我在一个切换的分区中有一个列表Javascript 仅使用jQuery将return false添加到父链接,javascript,jquery,html,Javascript,Jquery,Html,我在一个切换的分区中有一个列表 <li> <a href="#">Link</a> <ul stlye="display:none;"> <li><a href="http://www.google.com">Child Link</a></li> </ul> </li> 假设您所显示的内容位于ul内部,而ul又位于具有类存档的元素内部
<li>
<a href="#">Link</a>
<ul stlye="display:none;">
<li><a href="http://www.google.com">Child Link</a></li>
</ul>
</li>
假设您所显示的内容位于ul内部,而ul又位于具有类存档的元素内部,那么selector.archives ul li a将匹配父锚点和子锚点,因为您使用了子代选择器,因此会为子级调用处理程序,返回false;阻止它在链接后执行其默认操作 如果您的目标是只为早期链接而不是子链接触发处理程序,那么您可能需要更具体一些。不过,您没有向我们展示足够的标记,我们无法帮助您更加具体。如果我假设您的标记如下所示:
<div class="archives">
<ul>
<li>
<a href="#">Link</a>
<ul style="display:none;">
<li><a href="http://www.google.com">Child Link</a></li>
</ul>
</li>
</ul>
</div>
…然后,仅匹配链接锚而不匹配子链接锚的选择器将是.archives>ul>li>a,例如,使用直接子选择器
还要注意的是,您使用的是stlye而不是样式,但我认为这只是问题中的一个输入错误。为什么人们不使用复制粘贴 样式拼写错误
stlye=
从你的文章标题来看,你似乎想要这样的东西
$('.archives ul li a').click(function(){
var $children = $(this).parent().find('ul');
$children.slideToggle();
return $children.length > 0 ? false : true;
});
只有在找到子ul时,Return才会为false。子链接也由选择器匹配,并且在单击处理程序中,您正在阻止默认操作,该操作将导航到Google 因此,您应该调整选择器以仅获取切换链接,或者使用以下选项:
$('.archives ul li a').click(function(e){
if ($(this).siblings('ul').slideToggle().length) // if we found a list to toggle
e.preventDefault(); // or return false
});
由于return-false语句正在取消默认链接操作,因此您需要更加具体,以便不针对希望允许继续运行的链接
试试这个:
$('.archives > li > a').click(function () {
$(this).parent().find('ul').slideToggle();
return false;
});
通过使用>子选择器并将目标更改为仅最外层列表的直接子链接,子链接将不会被选中,并将继续工作。在您的代码中,您的$'.archives ul li a'将应用于任何子链接,而不仅仅是顶级链接。在这里似乎工作正常:。您使用的是哪个版本的jQuery,代码中是否有更改?抱歉@j08691,问题是如果子链接指向url,它不再点击,切换后或切换前后都不起作用?@Liam:不清楚a您希望发生什么,B发生了什么。你能清楚地说明这些东西是什么吗?你能给我们看看html标记,包括.archives吗?此外,您似乎希望使用.nextul或.siblingsul,而不是查找所有级别上的所有列表。投票结果是什么?来吧,谁的笨蛋胆小鬼认为这是错误的?
$('.archives > li > a').click(function () {
$(this).parent().find('ul').slideToggle();
return false;
});