Javascript 无法读取属性';toLowerCase';
我收到以下错误: 无法读取属性“toLowerCase” 使用以下代码:Javascript 无法读取属性';toLowerCase';,javascript,Javascript,我收到以下错误: 无法读取属性“toLowerCase” 使用以下代码: (function() { var tags = document.getElementsByTagName("h3"), l = tags.length, i, newid, n; for( i=0; i<l; i++) { newid = tags[i].firstChild.nodeValue.toLowerCase().replace(/[^a-z0-9-]/g,'-').re
(function() {
var tags = document.getElementsByTagName("h3"), l = tags.length, i, newid, n;
for( i=0; i<l; i++) {
newid = tags[i].firstChild.nodeValue.toLowerCase().replace(/[^a-z0-9-]/g,'-').replace(/--+/g,'-');
if( document.getElementById(newid)) {
n = 1;
do {n++;}
while(document.getElementById(newid+'-'+n));
newid += '-'+n;
}
tags[i].id = newid;
}
})();
(函数(){
var tags=document.getElementsByTagName(“h3”),l=tags.length,i,newid,n;
对于(i=0;i
在这种情况下,您请求的nodeValue
节点很可能不是文本节点,而是元素节点。元素及其包含的文本都是节点(文本节点是元素节点的子节点)
如果您不打算获取文本节点,然后检索其nodeValue
,那么您需要获取元素节点的textContent
,元素节点将递归地从其每个嵌套子节点获取textContent
(function() {
var tags = document.getElementsByTagName("h3"), l = tags.length, i, newid, n;
for( i=0; i<l; i++) {
newid = tags[i].firstChild.textContent.toLowerCase().replace(/[^a-z0-9-]/g,'-').replace(/--+/g,'-');
if( document.getElementById(newid)) {
n = 1;
do {n++;}
while(document.getElementById(newid+'-'+n));
newid += '-'+n;
}
tags[i].id = newid;
}
})();
(函数(){
var tags=document.getElementsByTagName(“h3”),l=tags.length,i,newid,n;
对于(i=0;我猜测tags[i]。firstChild.nodeValue
未定义或不是字符串。这不是全部错误。而nodeValue
返回什么?。nodeValue
用于文本节点和注释。您询问DOM选择时没有显示DOM,因此这没有帮助……您可能需要tags[i].firstChild.textContent.toLowerCase()
,但同样,您没有给出文档的示例,因此我们只能猜测。您应该在获取数据之前使用if语句包装您的项目,以检查节点是否存在。这很有效!感谢您花时间帮助我everyone@simondlh如果您想了解更多关于nodeValue属性的信息,请参阅以下内容:
(function() {
var tags = document.getElementsByTagName("h3"), l = tags.length, i, newid, n;
for( i=0; i<l; i++) {
newid = tags[i].firstChild.textContent.toLowerCase().replace(/[^a-z0-9-]/g,'-').replace(/--+/g,'-');
if( document.getElementById(newid)) {
n = 1;
do {n++;}
while(document.getElementById(newid+'-'+n));
newid += '-'+n;
}
tags[i].id = newid;
}
})();