2013-04-04 18 views
0

我的目标是在现有版块下创建另一个版块,但由于错误提示Uncaught TypeError: Cannot call method 'appendChild'未定义,因此我很难添加该版块。使用Javascript在现有版块下添加第二款

我用下面的代码的错误:

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> 

回答

0

你的函数总是返回undefined,因为如果getElementsByClassName函数没有定义,你创建它但是nev呃叫它。如果它被定义你的功能没有做任何事情。没有明确的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返回节点列表。

+0

你能解释一下吗?我相信我称之为功能。虽然,我忽略了我的代码并用cl替换“className”。 @默认 – fatalbert618 2013-04-04 19:43:35

+0

谢谢@默认。现在它摆脱了那个错误。此错误现在未被捕获TypeError:对象#没有方法'appendChild' – fatalbert618 2013-04-04 19:45:39

+1

'getElementsByClassName'将返回一个'NodeList',它可以包含多个节点。如果您只需要将'sectionElement'附加到第一个节点,请尝试'getElementsByClassName(“row”)[0] .appendChild(sectionElement);' – Bart 2013-04-04 19:47:49

相关问题