通过DOM进行解析可获得所有子项和值
Parsing through DOM get all children and values
Container是我添加了一些基本HTML的div。
debug_log函数正在打印以下内容:
我在一个跨度
我在一个分区
我在
p
p标记("aragraph标记!!")中的其余文本发生了什么。我想我不明白该如何穿过文档树。我需要一个函数来解析整个文档树,并返回所有元素及其值。下面的代码有点像是第一次尝试显示所有值。
container.innerHTML = '<span>I''m in a span! </span><div> I''m in a div! </div><p>I''m in a <span>p</span>aragraph tag!!</p>';
DEMO.parse_dom(container);
DEMO.parse_dom = function(ele)
{
var child_arr = ele.childNodes;
for(var i = 0; i < child_arr.length; i++)
{
debug_log(child_arr[i].firstChild.nodeValue);
DEMO.parse_dom(child_arr[i]);
}
}
通常在遍历DOM时,需要指定一个起点。从那里,检查起点是否有childNodes
。如果是,则循环遍历它们,如果它们也有childNodes
,则递归该函数。
下面是一些使用这些节点的DOM形式输出到控制台的代码(我使用document/HTML元素作为起点)。如果允许非开发人员加载此页面/代码并使用console
:,则需要针对window.console
运行if
recurseDomChildren(document.documentElement, true);
function recurseDomChildren(start, output)
{
var nodes;
if(start.childNodes)
{
nodes = start.childNodes;
loopNodeChildren(nodes, output);
}
}
function loopNodeChildren(nodes, output)
{
var node;
for(var i=0;i<nodes.length;i++)
{
node = nodes[i];
if(output)
{
outputNode(node);
}
if(node.childNodes)
{
recurseDomChildren(node, output);
}
}
}
function outputNode(node)
{
var whitespace = /^'s+$/g;
if(node.nodeType === 1)
{
console.log("element: " + node.tagName);
}else if(node.nodeType === 3)
{
//clear whitespace text nodes
node.data = node.data.replace(whitespace, "");
if(node.data)
{
console.log("text: " + node.data);
}
}
}
示例:http://jsfiddle.net/ee5X6/
在中
<p>I''m in a <span>p</span>aragraph tag!!</p>
您请求第一个子节点,它是包含"I''am in a"的文本节点。文本"aragraph tag!!"是第三个子项,未记录。
奇怪的是,包含"p"的最后一行永远不应该出现,因为span元素不是容器的直接子元素。
我不确定这是否是您所需要的,也不确定在您的环境中是否可能,但jQuery可以很容易地完成类似的任务。下面是一个可能有效的jQuery快速示例。
<html>
<head>
<script src="INCLUDE JQUERY HERE">
</script>
</head>
<body>
<span>
<span>I''m in a span! </span><div> I''m in a div! </div><p>I''m in a <span>p</span>aragraph tag!!</p>
</span>
<script>
function traverse(elem){
$(elem).children().each(function(i,e){
console.log($(e).text());
traverse($(e));
});
}
traverse($("body").children().first());
</script>
</body>
<html>
它给出以下控制台输出:
I''m in a span!
I''m in a div!
I''m in a paragraph tag!!
p
相关文章:
- 如何在我传递给视图的ViewModel集合中获得jQuery可选对象的值,以作为有序列表进行迭代
- 我如何获得“”的原始位置;ui“可拖动”;在“;drop”;事件
- 你能在JS中获得一个样式而不将其附加到DOM元素吗
- 如何在 Knockout.js 中更新可观察数组后立即使用 DOM 容器
- 如何在D3中获得可缩放Icicle布局中文本标签的旋转
- 如何获得聚合物Web组件的组合DOM
- 可以't在具有双重可排序功能的空dom元素上拖回元素
- jsPDF/jsPDF可自动将dom元素打印到表中
- 结合freewall.js和fancybox.js在Rails项目中获得可点击的放大图像
- 允许内容可编辑在 dom 修改后撤消
- 输入字段对用户只读,但仍可通过 DOM 进行编辑
- 可重复 DOM 元素上的角度 ng 模型
- 有没有一种方法可以获得DOM元素的边界框(以像素为单位)
- 单击可获得多个元素
- 在追加表的行之后无法获得dom元素
- 如何获得DOM的单元格在单列与隐藏行在数据表jquery
- Javascript:如何获得Dom树中的最后一个字符
- 使用$compile创建指令,并立即获得DOM属性
- 如何在Angular2中获得(DOM)元素的宽度
- 通过DOM进行解析可获得所有子项和值