1

我不熟悉使用“this”,但如果我理解正确,我只能在另一个定义的函数中使用它。

在这种情况下,我根据它的 a href 选择一个 li 项目,如果它符合条件,我需要添加一个类。我觉得我很接近但缺少一些小东西,'url [1]'来自分裂。

if ($('#Navbar li a:contains(' + url[1] + ')').attr('href')) {
    function () {
        $(this).parent().addClass('active');
    }
}

编辑:我正在循环基于我的 Li 对象并比较 href 以寻找匹配项。感谢大家帮助我度过这个难关。我对现在有了更好的理解this

     $('#Navbar li a').each(function () {
     if ($(this).attr('href')==url[1]) {
            $(this).parent().addClass('active');
         }
     });
4

4 回答 4

3

this指使用它的上下文。所以this是指您创建的匿名函数。解决您的问题的更好方法是:

var nav_item = $('Navbar li a:contains(' + url[1] + ')');

if (nav_item.attr('href')) {
    nav_item.parent().addClass('active');
}
于 2013-01-21T17:39:47.240 回答
2

$(this) 不指向您的目标元素(我认为没有看到您的完整 html 代码)。试试下面的代码:

var $a =$('Navbar li a:contains(' + url[1] + ')');
if ($a.attr('href')) {
        $a.parent().addClass('active');
}
于 2013-01-21T17:40:15.610 回答
2
 $('#Navbar li a').each(function () {
 if ($(this).attr('href')==url[1]) {
        $(this).parent().addClass('active');
     }
 });

循环是诀窍。谢谢:@roasted @brenjt @Maverick

于 2013-01-21T18:18:50.283 回答
1

简单的!:)

if ($('Navbar li a:contains(' + url[1] + ')').attr('href')) {
    var that=this;
    function () {
        //your condition checking
        $(that).parent().addClass('active');
    }
}

更新:: 上面的代码是错误的

你也可以这样做...

$('Navbar li a:contains(' + url[1] + ')').on('click',function(){
    if($(this).attr('href')){
        if(yourCOndition){
            $(this).parent().addClass('active');
        }
    }
});
于 2013-01-21T17:37:54.650 回答