Javascript 单子

Javascript 单子,javascript,Javascript,一个简短的问题。。获取列表的直接子级的JAVASCRIPT语句是什么?我试过: document.getElementById(id).getElementsByTagName('li'); 这将提供所有子节点。或 var-listItems=[]; var children=elem.childNodes; 对于(变量i=0;i

一个简短的问题。。获取列表的直接子级的JAVASCRIPT语句是什么?我试过:

document.getElementById(id).getElementsByTagName('li');
这将提供所有子节点。

var-listItems=[];
var children=elem.childNodes;
对于(变量i=0;i
循环:

document.getElementById(id).children

然后得到li元素(我认为它们都应该符合规范)


我认为
document.querySelectorAll('#id>li')
如果支持它,也应该可以工作。见:
同样的代码更快更好

var listItems = [];
var children = element.childNodes;
for(var i = 0, l=children.length; i<l; ++i) {
    var child = children[i];
    if(child.nodeType === 1 && child.tagName === "LI") {
        listItems.push(child);
    }
}
var-listItems=[];
var children=element.childNodes;

对于(var i=0,l=childrence.length;iNote,
childNodes
包含所有节点和元素。谢谢@Gumbo-我将在稍后的回答中澄清这一点。对于小列表不重要,因为我们通过
nodeName
进行测试,但对于较大的列表可能效率较低。最好使用
children[i].nodeType===Node.ELEMENT_Node
以确保它确实是一个元素节点。
LI
不应作为任何其他类型节点的nodeName返回。由于
nodeName
是在
Node
上定义的,因此它应该作为所有节点(包括文本和其他节点)的属性。嗯,看起来子节点不是DOM的一部分标准的,只是gecko和其他渲染引擎的一部分…childNodes可能是更好的答案,即使您必须检查列表中的每个元素.childNodes;这只会让我得到直系子对象?是的,请注意,如果您安装了firebug,您可以在该站点的监视窗口中看到这两个列表,并使用类似于
document.getElementsByTagName(“ul”)[0]
的手表为我工作的
querySelectorAll
的正确形式是
document.getElementById('id').querySelectorAll(“li”)
这应该是相同的结果,我不确定哪一个更快,也没有测试过,但它在firefox和chrome中的快速测试中似乎给出了相同的结果:,根据mdn,它
querySelectorAll
在文档和元素类上都可用:
var listItems = [];
var children = element.childNodes;
for(var i = 0, l=children.length; i<l; ++i) {
    var child = children[i];
    if(child.nodeType === 1 && child.tagName === "LI") {
        listItems.push(child);
    }
}