Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对于js中的…of语句-dom集合的问题_Javascript_For Loop_Ecmascript 6 - Fatal编程技术网

Javascript 对于js中的…of语句-dom集合的问题

Javascript 对于js中的…of语句-dom集合的问题,javascript,for-loop,ecmascript-6,Javascript,For Loop,Ecmascript 6,我正在尝试学习ES2015,我遇到了一个小函数的问题,我必须解析一些DOM元素,找到所有TextNode并删除它们 我在simpleforloop语句中有这个函数 function deleteTextNodes(element) { if(!element) { throw new Error ("Element doesn't exist") } for (let i = 0; i < element.childNodes.length; i +

我正在尝试学习ES2015,我遇到了一个小函数的问题,我必须解析一些DOM元素,找到所有TextNode并删除它们

我在simpleforloop语句中有这个函数

    function deleteTextNodes(element) {
    if(!element) {
        throw new Error ("Element doesn't exist")
    }
for (let i = 0; i < element.childNodes.length; i ++) {
    if (element.childNodes[i].nodeType == 3) {
        element.removeChild(element.childNodes[i]);
        i--;
    } else if(element.childNodes[i].nodeType == 1) {
        deleteTextNodes(element.childNodes[i])
    }
}
}

也许,第二个函数可以正常工作,除了一个-对于…在删除textnode或类似的内容后跳过下一个节点。我通过添加
I--,在第一个函数中解决了这个问题


因此,问题是如何在第二个功能中解决这个问题?

只是一个替代建议,因为范围是围绕ES6:

function deleteTextNodes(element) {
  if (!element) {
    throw new Error("Element doesn't exist")
  }
  let removeElement = [];
  for (elem of element.childNodes) {
    if (elem.nodeType == 3) {
      removeElement.push(elem);
    } else if (elem.nodeType == 1) {
      deleteTextNodes(elem)
    }
  }
  removeElement.forEach(elem =>elem.remove());
  return true
}
function deleteTextNodes(element) {
  if(!element) {
      throw new Error ("Element doesn't exist")
  }
  let coll = [element];
  while(coll.length){
    [{nodeType:nt}] = ([element,...coll] = coll);
    if (nt == 3) {
        element.remove();
    } else if(nt == 1) {
        coll.push(...element.childNodes);
    }
  }
}
这通过不断地向集合中添加子节点来防止递归的需要
[element,…coll]=coll
将第一个元素分配给元素var,并将剩余的集合分配给coll。
不一定更好,但它显示了一些很好的解构元素。

尝试
数组。从(element.childNodes)
@ArtyomNeustroev Thx U,它可以工作!这可能意味着什么?你试过没有?
function deleteTextNodes(element) {
  if(!element) {
      throw new Error ("Element doesn't exist")
  }
  let coll = [element];
  while(coll.length){
    [{nodeType:nt}] = ([element,...coll] = coll);
    if (nt == 3) {
        element.remove();
    } else if(nt == 1) {
        coll.push(...element.childNodes);
    }
  }
}