childnodes.add和appendchild方法有什么区别?childnodes.add方法:
1.
var oOption = document.createElement("OPTION");
  oProvince.options.add(oOption);
  oOption.innerText ="...";2.var oOption = document.createElement("OPTION");
oOption.innerText ="...";
  oProvince.options.add(oOption);
  为什么这样会报错 ,而用appendchild方法不会报错。
知道这个问题比较简单,但我刚学js,希望清楚的牛人给详细解释一下。
注:
看到网上有那个儿子穿衣服和老头生儿子的比喻,但还是不太明白。

解决方案 »

  1.   

    http://news.cnblogs.com/q/4538/
      

  2.   

    个人认为 都是添加子节点!
    childnodes 兼容性不好!
    建议使用 appendchild!!对于 select option最好是: oProvince.options.add(new Option("",""));
      

  3.   

    var 类型是弱类型的,在var oOption = document.createElement("OPTION");定义的时候,oPtion这个变量相当于是Object类型的,只有添加到Select标签当中之后,系统才能知道新创建的这个元素是option类型的。这个变量才有innerText属性,之后才能给innerText赋值。个人理解。
      

  4.   

    jquery版:
    $("#city").append("<option></option>").val().html();javascript:
    var newoption=document.createElement("Option");
    newoption.innerText="";
    newoption.value="";
    $getid().appendChild(newoption);
      

  5.   

    appendchild为w3c标准
    options.add并不是标准。
    另外appendChild在ie上也有内存泄露的问题。一般会用insertBefore来代替另另外
    两种不同的标准api之间不能通信
    如果要增加option,要这样
    options.add(new Option(index, value));
      

  6.   

    两个不同的API指的是什么?谢谢
      

  7.   

    刚刚做了试验,
    方法一:
     oProvince.options.add(document.getElementById("sd"));
    方法二:
     oProvince.appendChild(document.getElementById("sd"));方法一出错,而方法二没问题,查了一下手册:Before you can add an element to a collection, you must create it first by using the createElement method.options.add必须添加的是新创建的元素而不能是已存在的元素,而给innerText赋值以后,可能就会把它当作一个已存在的元素了,所以会报错。
    不知这样解释对不对,欢迎大家多发表见解!
      

  8.   


    var op = document.createElement('option');
    op.text = '这是文字';
    op.value = '这是值';
    selectObj.options.add(op);
      

  9.   

    谢谢指点!
    那op.text和innerText有什么区别呢?
      

  10.   

    childnodes.add 添加
    appendchild 追加 
    我的理解 。
    childnodes.add 是不是还要带个index参数 。
    一般还是后者用得多点 。
      

  11.   


    应该说,只有appendChild方法才可以append已经存在的元素。当节点需要移动的时候,不需要把节点从节点树上删除,而只需要appendChild一下。
      

  12.   

    那给innerText或innerHTML赋值后,为什么就不能使用options.add方法添加了呢?
      

  13.   

    因为这时options已经不是最新的对象了。往里面添加会产生类似于java的concurrentmodificationexception。