0

Uncaught TypeError: Cannot call method 'appendChild'我的目标是在现有部分下创建另一个部分,但由于未定义的错误,我很难添加它。

我收到以下代码错误:

getElementsByClassName("row").appendChild(sectionElement);

使用这个创建的功能:

function getElementsByClassName(cl) {
    if (!document.getElementsByClassName) {
        document.getElementsByClassName = function (className) {
            var node = [];
            var elem = this.getElementsByTagName('*');
            for (var i = 0; i < elem.length; i++) {
                if((' ' + elem[i].className + ' ').indexOf(' ' + cl + ' ') > -1) retnode.push(elem[i]);
             }
             return node;
        }; 
    }
}

HTML 代码:

<div class='row'>
    <section class='well well-small'>
        <legend>Select An Animal</legend>
        <form method="post" id="speciesForm">
            <div class="control-group">
                <div class="controls"></div>
            </div>
            <input type="button" class="btn" >
            <input type="button" class="btn" v>
        </form>
    </section>
</div>
4

1 回答 1

0

您的函数将始终返回undefined,因为如果 getElementsByClassName未定义该函数,您将创建它但永远不会调用它。如果它被定义,你的函数不会做任何事情。没有显式return语句的函数将返回undefined。对您的函数的这些修改应该可以解决问题:

function getElementsByClassName(cl) {
    if (!document.getElementsByClassName) {
        document.getElementsByClassName = function (className) {
           var node = [];
           var elem = this.getElementsByTagName('*');
           for (var i = 0; i < elem.length; i++) {
             if((' ' + elem[i].className + ' ').indexOf(' ' + className + ' ') > -1) retnode.push(elem[i]);
           }
           return node;
        }; 
        return document.getElementsByClassName(cl);
    } else {
        return document.getElementsByClassName(cl);
    }
}

还应注意,调用appendChild此函数的结果将失败,因为您在自定义函数中返回一个数组,而本机getElementsByClassName返回一个 NodeList。

于 2013-04-04T19:37:49.183 回答