JavaScript ...无法调用undefined的方法匹配

时间:2012-11-15 15:41:53

标签: javascript

我在JavaScript中收到此错误:Uncaught TypeError: Cannot call method 'match' of undefined。我试图在没有jQuery的情况下写这个,因为它将是网站上唯一的js。

我的代码应该在链接到当前页面的导航中的<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)

谢谢!

4 个答案:

答案 0 :(得分:5)

NodeLists拥有lengthitemnamedItem属性。

使用for (var i = 0; i < foo.length; i++)而不是for i in foo来迭代它们,只触及节点。

答案 1 :(得分: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属性的页锚(例如使用#top调用<a name="top">)。在=中添加了第二个IF,以使其按预期工作。并更正了for语法。

答案 2 :(得分:0)

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

在javaScript中,等号=是赋值运算符。您可能意味着双等于==,您可以在其中检查没有类型强制(5 == "5")或三等于===的值,以进行强类型检查(5 !== "5")。

答案 3 :(得分:0)

有时document.location.pathname.match(/[A-z]+$/)可以为空。如果您尝试使用document.location.pathname.match(/[A-z]+$/)[0],则无法访问0 Element of null。