Javascript 无法读取属性';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

我收到以下错误: 无法读取属性“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,'-').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;
    }
})();