jQuery: preventDefault только для родительской ссылки


Решение:

Нашел решение.

Используемый parentNode:

$('.skaftetopmenu-li > a').click(function(e) {
   e.preventDefault();
   var subid = $(this.parentNode).attr('id');
   if (subid !="forsidemenu"){
      var str = $('#submenu-content-'+subid).html();
      if ($.trim(str) == ""){
         $('.submenu-content', this.parentNode).load('http://' + skafte.base_url + '/inc/top-menu-subs/'+subid+'_submenu.html');
      }
   }
});

У меня есть такое меню:

<ul>
  <li class="parent">
    <a href="url">Link title parent</a>
    <ul>
      <li><a href="url">Link title child</a></li>
    </ul>
  </li>
</ul>

Я попробовал следующее в jQuery:

$('.parent').click(function(e) {
  e.preventDefault();
});

Однако это отключает все элементы во всей структуре меню. Я хочу отключить только родительские ссылки. Те, что в "ul li", а не ссылки в "ul ul li", но я не могу понять, как, и я искал и искал. Так что, пожалуйста, помогите мне!


EDIT: Спасибо за ответы. Я думал, что упрощу свой код в вопросе, но это на самом деле не принесло мне пользы. Итак, вот фактический код, который я использую:

$('.skaftetopmenu-li').click(function(e) {

   var subid = $(this).attr('id');

   if (subid !="forsidemenu"){

      var str = $('#submenu-content-'+subid).html();

      if ($.trim(str) == ""){

         $('.submenu-content', this).load('http://' + skafte.base_url + '/inc/top-menu-subs/'+subid+'_submenu.html');
      }
   }
});

И HTML:

<li class="skaftetopmenu-li" id="priser">
   <a href="http://<?php echo DOMAIN?>/priser.php">Priser &amp; Sortiment</a>
   <div class="submenu-content" id="submenu-content-priser"></div>
</li>

Если я попытаюсь сделать, как вы предлагаете, и установить его в:

$('.skaftetopmenu-li > a').click(function(e) {
   e.preventDefault();

Это не работает..

3 4

3 ответа:

Похоже на ответ Остина Маллинса, я думаю, что вы хотите этого:

$('li.parent > a').click(function(e) {
    e.preventDefault();
});

Попробуйте это:

$(".parent > ul > li > a").click( function(e) {
    e.preventDefault();
    // ...
});

> соответствует только непосредственным дочерним элементам предыдущего тега.

Это работает для меня на jsbin:

$('.parent>a').on('click', function( e ){
   e.preventDefault();
} );

Http://jsbin.com/irojiq/1/edit