2012-10-29 113 views
5

此代碼無效。 this+'>a'不是有效的語法。 那麼,我如何在this的孩子中添加/刪除一個班級?在這種情況下,一個a元素。向這個孩子添加班級

jQuery(function ($) { 
     $("nav.menu>ul>li").hover(
      function() { 
       $(this+'>a').addClass("hover_triangle");//error 
      }, 

      function() { 
       $(this+'>a').removeClass("hover_triangle");//error 
      }); 
    }); 

我不能這樣做,因爲nav.menu>ul>li>a將選擇菜單中的所有元素a

回答

10
$(this).children('a').addClass('hover_triangle'); 

,並與全碼:

jQuery(function($) { 
    $('nav.menu>ul>li').hover(function() { 
     $(this).children('a').addClass('hover_triangle'); 
    },function() { 
     $(this).children('a').removeClass('hover_triangle'); 
    }); 
}); 
1

$('a', this)讓你只看裏面的this對象的

jQuery(function ($) { 
    $("nav.menu>ul>li").hover(
     function() { 
      $('a', this).addClass("hover_triangle");//error 
     }, 

     function() { 
      $('a', this).removeClass("hover_triangle");//error 
     }); 
}); 
1

$(this).find('a').addClass('hover_triangle') - 更常見的方式bacause沒有必要爲直接孩子

0

您可以使用.find()

$(this).find('> a').addClass("hover_triangle"); 

如果你想只選擇直接孩子.find('a')將變得更嵌套的錨。要避免這種情況,你需要這樣只會訪問nav.menu>ul>li

CHECK FIDDLE

直接子元素使用.find('> a').children('a')

0

有2種方法可以搜索this的後代。大多數擁有find()回答(它是更容易閱讀),但jQuery選擇還可以有第二個arfument這是context

$('a', this)是另一個語法和相同$(this).find('a)。 Internallly jQuery將採取第一種情況和使用find()反正,但語法是有效的,許多使用它

API Refrence: jQuery(selector [, context])