1

「this」を使用するのは初めてですが、これを正しく理解していれば、別の関数内で定義された関数内でしか 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 に答える