Вимкнути всі посилання в батьківському блоці, але не в одному з його дочірніх блоків

У мене є розділ, що містить клас упаковки. Структура HTML виглядає приблизно так.

<div class="wrapper">
   <div class="header">
     LOGO
   </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');

Чи можемо ми зробити це без перевірки, використовуючи цикл? Або це вплине на те ж саме, використовуючи цикли та без використання циклів?

0
$ ('. wrapper nav'). bind ('click');
додано Автор Harsha Venkatram, джерело

7 Відповіді

Базова одна відповідь HarryFink використовує щось на зразок цього (функція closest більш ефективна, ніж батьки )

$('.wrapper').on('click', 'a', function(e){  
    if(!$(this).closest('.nav')){  
        e.preventDefault();  
    }  
})
2
додано
Так, це правда. А фільтрування тега 'a' також прискорює сценарій.
додано Автор HarryFink, джерело

Спробуй

$('.wrapper').find('a').not($('.wrapper').find('.nav a')).on('click', function(e){
    e.preventDefault();
})
1
додано

Спробуйте це,

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

Робоча скрипка

1
додано

Have a look here: http://jsfiddle.net/jSEnu/1/

КОД

$(".wrapper div:not('.nav') a").prop("href", "#"); 
1
додано

Ви можете використовувати наступне, щоб націлити всі anchors , які є нащадками wrapper , що містяться в іншому div , який не має класу < code> nav :

$('.wrapper div:not(".nav") a')
1
додано

Виберіть їх так

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

A sample (not the same, just similar): http://jsfiddle.net/balintbako/rGwtw/

1
додано

Спробуйте щось на зразок цього:

$('.wrapper').on('click', function(e){
    var $target = $(e.target);
    if(!$target.parents('.nav')){
         e.preventDefault();
    }
})
1
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram