2012-11-15 48 views
2

我在我的JavaScript中收到此錯誤:Uncaught TypeError: Cannot call method 'match' of undefined。我試圖寫這沒有jQuery,因爲它將是該網站上唯一的js。JavaScript ...不能調用undefined的方法匹配

我的代碼應該在鏈接到當前頁面的導航欄中爲<a href="...>添加一個「活動」類。

我猜它可能是contentLoaded功能?.... source

這裏是我的代碼...(第9行發生錯誤)... fiddle

(function(window, document, undefined) { contentLoaded(window, function() { 

    var page = document.location.pathname.match(/[A-z]+$/)[0], 
     nav_anchors = document.getElementsByTagName('header')[0] 
          .getElementsByTagName('nav')[0] 
          .getElementsByTagName('a'); 

    for(i in nav_anchors) 
    if(nav_anchors[i].href.match(/[A-z]+$/)[0] = page) //LINE 9 <-- Error 
     nav_anchors[i].classList.add('active'); 

}) 
})(this, this.document) 

謝謝!

+1

請勿使用'for(x in y)'瀏覽數組或NodeList。使用常規的'for(var i = 0; i

回答

5

NodeLists具有length,itemnamedItem特性。

使用for (var i = 0; i < foo.length; i++)而不是for i in foo來迭代它們並僅擊中節點。

+0

並且最好的方法是'for(var i = 0,j = foo.length; i Mic

+2

這就進入了難以讀懂的微觀優化領域。除非出現性能問題,否則毫無意義。 – Quentin

2
(function(window, document, undefined) { contentLoaded(window, function() { 

    var page = document.location.pathname.match(/[A-z]+$/)[0], 
     nav_anchors = document.getElementsByTagName('header')[0] 
          .getElementsByTagName('nav')[0] 
          .getElementsByTagName('a'); 

    for(var i=0;i<nav_anchors.length;i++) 
    if(typeof nav_anchors[i].href != "undefined" && nav_anchors[i].href.match(/[A-z]+$/)[0] == page) 
     nav_anchors[i].classList.add('active'); 

}) 
})(this, this.document) 

增加,如果錨的href設置,如果你有沒有HREF屬性(如<a name="top">使用#top返回調用)頁面的錨的檢查。在IF中增加第二個=,使其按照規定工作。並更正了語法。

+0

謝謝!我沒有明白。 –

0
if(nav_anchors[i].href.match(/[A-z]+$/)[0] = page) //LINE 9 <-- Error 

在javaScript中,等號=是一個賦值運算符。您可能意思是雙倍等於==,您可以在沒有強制類型檢查的情況下檢查值(5 == "5")或三重等於===(其中5 !== "5")。

+0

是的,輸入錯誤。謝謝 –

0

有時document.location.pathname.match(/[A-z]+$/)可以爲空。如果您嘗試使用document.location.pathname.match(/[A-z]+$/)[0],則無法訪問null的0元素。

+0

也許這樣比較好? 'document.location.toString()。match(/ [Az \ - \ _] + $ /)[0]' –

+0

使用這樣的somne​​代碼也許:'var page = document.location.pathname.match(/ [Az ] + $ /); if(typeof page ===「object」)page = page [0];' – Mic

相關問題