Javascript 这孩子不工作

Javascript 这孩子不工作,javascript,dom,dom-traversal,Javascript,Dom,Dom Traversal,HTML: 当我调用add时,会抛出uncaughttypeerror:Object#没有方法“appendChild”。知道为什么吗?不返回一个元素,它返回一个类似数组的对象。它基本上意味着可以将其用作数组 例如,你可以这样做: function add(content){ ul=document.getElementsByTagName("ul"); var li=document.createElement("li"); li.innerHTML=content;

HTML:

当我调用
add
时,会抛出
uncaughttypeerror:Object#没有方法“appendChild”
。知道为什么吗?

不返回一个元素,它返回一个类似数组的对象。它基本上意味着可以将其用作数组

例如,你可以这样做:

function add(content){
   ul=document.getElementsByTagName("ul");
   var li=document.createElement("li");
   li.innerHTML=content;
   ul.appendChild(li);
}
但是,如果这个列表有一个ID,为什么不直接使用它呢?ID在整个文档中必须是唯一的,因此此方法只返回一个元素

var ul = document.getElementsByTagName("ul")[0];


注意:请确保将
ul
声明为函数的局部变量(添加
var
),除非您打算在函数外部使用它。

document.getElementsByTagName不返回元素,而是返回元素数组

您需要循环此数组或获取一些唯一的元素

请参阅以下文档:

//检查表中多个单元格的对齐方式。
var table=document.getElementById(“预测表”);
var cells=table.getElementsByTagName(“td”);
对于(var i=0;i
您遇到的问题是
getElementsByTagName()
(注意函数名称中的“s”所隐含的复数形式)返回一个DOM节点数组,而不是单个DOM节点,这是
appendChild()
希望处理的;因此,您需要确定要使用的节点阵列:

// check the alignment on a number of cells in a table. 

var table = document.getElementById("forecast-table"); 
var cells = table.getElementsByTagName("td"); 
for (var i = 0; i < cells.length; i++) { 
    var status = cells[i].getAttribute("data-status"); 
    if ( status == "open" ) { 
        // grab the data 
    }
}
请记住,如果页面上只有一个
ul
,您可以使用
getElementsByTagName(“ul”)[0]
,或者(这可能更可取)向该
ul
添加一个
id
属性,然后使用
getElementById()
选择它,这将像预期的那样,只返回该
id

参考资料:


如果没有jquery,那么为什么要将其添加为问题的标记?抱歉,,,我真的不知道在哪里用jquery标记它。标记是javascript和dom。对吗?当问题被创建时,它被标记为
jQuery
——Jasper编辑了它,用
javascript
替换了它。对不起,,,这一定是我的错误……当我使用getElementById时,控制台输出了“uncaughtTypeError:无法调用null的方法'appendChild'@bingie2680 my表明它工作正常:)。请检查链接,如果您仍然有问题,请创建一个关于您的场景的小提琴。
var ul = document.getElementById('datalist');
// check the alignment on a number of cells in a table. 

var table = document.getElementById("forecast-table"); 
var cells = table.getElementsByTagName("td"); 
for (var i = 0; i < cells.length; i++) { 
    var status = cells[i].getAttribute("data-status"); 
    if ( status == "open" ) { 
        // grab the data 
    }
}
function add(content){
   ul=document.getElementsByTagName("ul")[0]; // the [0] identifies the first element of the returned array
   var li=document.createElement("li");
   li.innerHTML=content;
   ul.appendChild(li);
}