2017-10-18 21 views
0

あるトピックからコードをコピーしました。私はそれを完全に分析し理解した。そのトピックは、現在のページのクラスを割り当てることに関するものでした(そして、HTML名はリンクで検索され、現在のページと比較されました)。Jquery:未定義の 'addClass'プロパティを読み取れません

function getCurrentLinkFrom(links){ 
    var curPage = document.URL; 
    curPage = curPage.substr(curPage.lastIndexOf("/ ")) ; 

    links.each(function(){ 
     var linkPage = $(this).attr("href"); 
     linkPage = linkPage.substr(linkPage.lastIndexOf("/")); 
     if (curPage == linkPage){ 
      return $(this); 
     } 
    }); 
}; 

$(document).ready(function(){ 
    var currentLink = getCurrentLinkFrom($('navbar a')); 
    currentLink.addClass('current_link'); 

}); 

答えて

1

これは、あなたが答えを得るのを助けるが、同時に重要なスキルであなたを武装されます...私はあなたが試合を取得し、なぜされているかどうかを示します2つのログ・ステートメントを追加しました。

一致するものが見つかった場合にのみ値を返します。一致するものが見つからずに関数を実行したためです。

function getCurrentLinkFrom(links){ 
    var curPage = document.URL; 
    curPage = curPage.substr(curPage.lastIndexOf("/ ")) ; 

    links.each(function(){ 
     var linkPage = $(this).attr("href"); 
     linkPage = linkPage.substr(linkPage.lastIndexOf("/")); 

     // This will help you see if any match 
     console.log(curPage, linkPage); 

     if (curPage == linkPage){ 
      return $(this); 
     } 
    }); 

    // This will help you to see when there is no match 
    console.log('Not found!', curPage); 
}; 
+0

ループが終了するまで、各ループ内にconsole.log(見つからない...)がありませんか? – artSir

+0

@artSirループが終了するまでは、一致するものが見つかるかどうかわかりません。が見つかった場合、return文は関数を短絡します。そうでなければ、最後まで実行します。その場合は...見つからない。 – Fenton

0

あなたが比較している2つの値の間で異なってあなたののlastIndexOf呼び出しのように私には見えます。 curPageスラッシュの後ろに空白が1つあり、もう1つは空白です。そうは言っても、あなたが(潜在的に)ノーマッチした要素の代わりにjQueryオブジェクトにaddClassを呼び出すことだろうと

、あなたは少しここにあなたのロジックを簡素化し、より良いパターンをたどるjQuery's filter functionを見てみる必要があります未定義の変数。

関連する問題