使用Javascript在现有部分下添加第2部分

时间:2013-04-04 19:31:35

标签: javascript html dom nodes

我的目标是在现有部分下创建另一个部分,但我很难添加它,因为错误表示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>

1 个答案:

答案 0 :(得分: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。