0

我有一个 div 类说包装器。html 的结构看起来像这样。

<div class="wrapper">
   <div class="header">
     <a href="http://mysite.com">LOGO</a>
   </div>
   <div class="nav">
     <!-- Anchors -->
   </div>
   <div class="container">
     <!-- Other contents anchors etc. -->
   </div>
</div>

有什么方法可以禁用包装器内的所有链接,除了 div 中具有类“nav”的锚点?这样做的有效方法是什么?

我正在使用以下代码禁用所有链接 -

$('.wrapper').find('a').die('click');
$('.wrapper').find('a').unbind('click');
$('.wrapper').find('a').removeAttr('onclick');
$('.wrapper').find('a[href^="javascript"]').removeAttr('href');

我们可以在不使用循环进行检查的情况下做到这一点吗?或者,它会影响相同的,使用循环和不使用循环?

4

7 回答 7

2

基于 HarryFink 的答案使用类似这样的东西
closest功能比更有效parents

$('.wrapper').on('click', 'a', function(e){  
    if(!$(this).closest('.nav')){  
        e.preventDefault();  
    }  
})
于 2013-06-21T10:24:47.553 回答
1

像这样选择它们

$('div.wrapper > div:not(".nav") a')

一个样本(不一样,只是相似):http: //jsfiddle.net/balintbako/rGwtw/

于 2013-06-21T10:16:17.117 回答
1

尝试这样的事情:

$('.wrapper').on('click', function(e){
    var $target = $(e.target);
    if(!$target.parents('.nav')){
         e.preventDefault();
    }
})
于 2013-06-21T10:11:12.700 回答
1

您可以使用以下内容来定位 all anchors,它们是 的后代wrapper,包含在 anotherdiv中,它没有 class nav

$('.wrapper div:not(".nav") a')
于 2013-06-21T10:12:06.593 回答
1

尝试

$('.wrapper').find('a').not($('.wrapper').find('.nav a')).on('click', function(e){
    e.preventDefault();
})
于 2013-06-21T10:12:38.053 回答
1

尝试这个,

$('.wrapper div:not(".nav") a').removeAttr('href');

工作小提琴

于 2013-06-21T10:12:50.393 回答
1

看看这里:http: //jsfiddle.net/jSEnu/1/

代码

$(".wrapper div:not('.nav') a").prop("href", "#"); 
于 2013-06-21T10:13:58.937 回答