2

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

<a href="...>我的代码应该在链接到当前页面的导航中添加一个“活动”类。

我猜它可能是contentLoaded函数?....来源

这是我的代码...(第 9 行出现错误)...小提琴

(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

4 回答 4

5

NodeListslength,itemnamedItem属性。

使用for (var i = 0; i < foo.length; i++)for i in foo迭代它们并且只命中节点。

于 2012-11-15T15:45:57.160 回答
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以使其按预期工作。并更正了 for 语法。

于 2012-11-15T15:48:52.693 回答
0
if(nav_anchors[i].href.match(/[A-z]+$/)[0] = page) //LINE 9 <-- Error

在 JavaScript 中,等号=是赋值运算符。您可能是指双等号==,您可以在没有类型强制的情况下检查值(5 == "5")或三等号===用于强类型检查(其中5 !== "5")。

于 2012-11-15T15:54:38.557 回答
0

有时document.location.pathname.match(/[A-z]+$/)可以为空。如果你尝试使用document.location.pathname.match(/[A-z]+$/)[0]你不能访问 null 的 0 元素。

于 2012-11-15T15:57:18.613 回答