Javascript 对于js中的…of语句-dom集合的问题
我正在尝试学习ES2015,我遇到了一个小函数的问题,我必须解析一些DOM元素,找到所有TextNode并删除它们 我在simpleforloop语句中有这个函数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 +
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);
}
}
}