递归不适用于多个级别

时间:2019-04-09 19:06:23

标签: javascript recursion

我有一个递归函数,但它似乎不适用于多个级别,这应该引起递归。有什么想法我要去哪里吗?

      function productData(elem) {
        console.log("elem 1", elem)

        if (elem[0]) {
          if (elem[0].hasChildNodes()) {
            elem[0].childNodes.forEach(function (item) {
              console.log("item", item)
              console.log("item", item.childNodes)
              productData(item);
            });
          }
        }
      }

const product = document.querySelectorAll('[itemtype="http://schema.org/Product"]');

  productData(product)

2 个答案:

答案 0 :(得分:0)

如果我选择html标记并通过它运行代码,则它会吐出子节点。

 var productData = function(elem) {
    console.log("elem 1", elem)

    if (elem[0]) {
      if (elem[0].hasChildNodes()) {
        elem[0].childNodes.forEach(function (item) {
          console.log("item", item)
          console.log("item", item.childNodes)
          productData(item);
        });
      }
    }
  }
  
productData(document.querySelectorAll('html'));

我在本地跑步时的输出: enter image description here

您有您要阅读的HTML页面示例吗?也许您选择的元素实际上没有子节点。

此外,您要具体做什么?这几乎看起来像是广度优先的搜索问题。

答案 1 :(得分:0)

我删除了elem上的数组索引访问,因为在forEach循环中,只有一项通过。

 function productData(elem) {
    console.log("elem 1", elem)

    if (elem) {
      if (elem.hasChildNodes()) {
        elem.childNodes.forEach(function (item) {
          console.log("item", item)
          console.log("item", item.childNodes)
          productData(item);
        });
      }
    }
  }