我在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)
谢谢!
答案 0 :(得分:5)
NodeLists
拥有length
,item
和namedItem
属性。
使用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。