【问题标题】:Get childnode's children until there aren't any获取childnode的孩子,直到没有
【发布时间】:2015-08-24 19:21:52
【问题描述】:

我正在使用 DOMParser() 解析 HTML 字符串,并尝试使用 for 循环获取所有子节点。但是我不知道如何获取子节点的节点及其子节点等...

var str = "<div><p>paragraph<span>span</span></p></div>";
var doc = new DOMParser().parseFromString(str, 'text/html');
var childnodes = doc.body.childNodes;

for (var i = 0; i < childnodes.length; i++) {
    console.log(childnodes[i]);
    console.log(childnodes[i].childNodes);
    console.log(childnodes[i].childNodes[i].childNodes);
}

这可以按我的意愿工作,它给出了divptextspan,但是我如何使用一个获取所有孙子的 for 循环来完成这项工作?没有 jQuery?

Here's a fiddle 上面的代码。

【问题讨论】:

  • 您可能需要为此使用递归。
  • doc.body.querySelectorAll('*') 有什么理由不工作吗?
  • @adeneo 不会给出文本节点吧?
  • @adeneo 那我就不能用了! :(

标签: javascript html children domparser


【解决方案1】:

你应该为此使用递归:

function travelChildren(childnodes){

    for (var i = 0; i < childnodes.length; i++) { // for each node in childnodes
        console.log(childnodes[i]); // console log current node
        travelChildren(childnodes[i].childNodes) // and travel its children
    }

}

travelChildren(childnodes) // start recursion with the child nodes you want

【讨论】:

  • 啊——我明白这是怎么回事了!对不起;我以前从未听说过递归,所以没想过使用它:/ 非常感谢! :)
  • @ᔕᖺᘎᕊ 没问题,很高兴你成功了。随意接受已解决您问题的答案
【解决方案2】:

对于那些可以使用 jQuery 的人,你可以在 while 循环中进行。

var $children = $(document.body).children();
while ($children.length) {
    console.log($children.attr('class'));
    $children = $children.children();
}

或者按照@adeneo 的建议,您可以使用contents()

$(document.body).find('*').contents();

尽管 jQuery 建议使用“Avoid the All Selector,”,但无论哪种方式,它都可能是昂贵的代码。

【讨论】:

  • 对不起;不能使用 jQuery - 但如果可以,我会的!所以无论如何+1 :)
  • 我认为这是可能的,但对于可能看到这个问题的其他人来说,这仍然是一个很好的解决方案! :)
  • 使用 jQuery,它就像$(doc.body).find('*').contents()
  • @adeneo 不错的建议,谢谢!我将编辑我的答案。
猜你喜欢
  • 2018-10-16
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2018-01-29
  • 2022-01-08
  • 2013-08-30
  • 1970-01-01
  • 2014-03-27
相关资源
最近更新 更多