我试图在一个页面上循环所有元素,所以我想检查存在于这个页面上的一个特殊类的每个元素。
我怎么说我要检查每个元素呢?
我试图在一个页面上循环所有元素,所以我想检查存在于这个页面上的一个特殊类的每个元素。
我怎么说我要检查每个元素呢?
当前回答
我也在找。嗯,不完全是。我只想列出所有DOM节点。
var currentNode,
ni = document.createNodeIterator(document.documentElement, NodeFilter.SHOW_ELEMENT);
while(currentNode = ni.nextNode()) {
console.log(currentNode.nodeName);
}
要获取具有特定类的元素,可以使用过滤器函数。
var currentNode,
ni = document.createNodeIterator(
document.documentElement,
NodeFilter.SHOW_ELEMENT,
function(node){
return node.classList.contains('toggleable') ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
}
);
while(currentNode = ni.nextNode()) {
console.log(currentNode.nodeName);
}
找到的解 中数
其他回答
最好的解决方案是使用递归:
loop(document);
function loop(node){
// do some thing with the node here
var nodes = node.childNodes;
for (var i = 0; i <nodes.length; i++){
if(!nodes[i]){
continue;
}
if(nodes[i].childNodes.length > 0){
loop(nodes[i]);
}
}
}
与其他建议不同的是,这个解决方案不需要为所有节点创建一个数组,因此内存占用更少。更重要的是,它能发现更多的结果。我不确定这些结果是什么,但在chrome上测试时,它发现比document.getElementsByTagName("*")多50%的节点;
从这个链接 javascript参考
<html>
<head>
<title>A Simple Page</title>
<script language="JavaScript">
<!--
function findhead1()
{
var tag, tags;
// or you can use var allElem=document.all; and loop on it
tags = "The tags in the page are:"
for(i = 0; i < document.all.length; i++)
{
tag = document.all(i).tagName;
tags = tags + "\r" + tag;
}
document.write(tags);
}
// -->
</script>
</head>
<body onload="findhead1()">
<h1>Heading One</h1>
</body>
</html>
更新:编辑
自从我的上一个答案,我找到了更好更简单的解决方案
function search(tableEvent)
{
clearResults()
document.getElementById('loading').style.display = 'block';
var params = 'formAction=SearchStocks';
var elemArray = document.mainForm.elements;
for (var i = 0; i < elemArray.length;i++)
{
var element = elemArray[i];
var elementName= element.name;
if(elementName=='formAction')
continue;
params += '&' + elementName+'='+ encodeURIComponent(element.value);
}
params += '&tableEvent=' + tableEvent;
createXmlHttpObject();
sendRequestPost(http_request,'Controller',false,params);
prepareUpdateTableContents();//function js to handle the response out of scope for this question
}
使用*
var allElem = document.getElementsByTagName("*");
for (var i = 0; i < allElem.length; i++) {
// Do something with all element here
}
你可以试试 document.getElementsByClassName(“special_class”);
安迪e给出了一个很好的回答。
我会补充,如果你觉得选择所有的子在一些特殊的选择器(这需要发生在我最近),你可以应用方法“getElementsByTagName()”对任何DOM对象你想要。
举个例子,我需要解析网页的“视觉”部分,所以我做了这个
var visualDomElts = document.body.getElementsByTagName('*');
这绝对不会考虑到头部部分。