2017-08-31 128 views
0

我期待获得具有特定标记的元素列表,以及是否存在多个循环并移除其他元素。删除重复的页面元素 - Javascript

目前我做的:

if (document.getElementsByName("description")[0]) { 
    document.getElementsByName("description")[0].setAttribute("content", "My Description"); 
} else { 
    var meta = document.createElement('meta'); 
    meta.name = "description"; 
    meta.content = "My Description"; 
    document.getElementsByTagName('head')[0].appendChild(meta); 
} 

但我想删除任何东西,是第一要素之后?我会怎么做?

+0

是你的问题的循环或者是有关如何删除元素?你试图解决这个问题? –

回答

1

,你可以这样做:

[...document.getElementsByTagName('span')].slice(1).forEach(e=>e.parentNode.removeChild(e)); 
[...document.getElementsByTagName('div')].slice(1).forEach(e=>e.parentNode.removeChild(e)); 

首先选择与特定标签名的所有元素。将它转换为一个数组(在这种情况下使用扩展运算符),也可以使用[].slice.call(...)。之后,可以对该数组元素调用切片,并从该数组中移除第一个元素,循环遍历元素并将其移除。 :)

编辑解决方案,适合初学者。

var elements = document.getElementsByTagName('span'); 
for(var i=elements.length-1;i>0;i--) 
    elements[i].parentNode.removeChild(elements[i]); 
+0

对于初学者的解决方案将无法正常工作,'getElementsByTagName'返回一个实时的HTMLCollection,所以一旦元素从DOM中移除,它也将从'elements'中移除,因此如果你这样做,你将跳过多个元素办法。 –

+0

你太对了@ t.niese。我的错。我修好了它。现在它按预期工作。我记得这个问题太迟了,忘了修复它。感谢您指出这一点 –

0

如果你想砍描述后什么[0]头,你可以使用 “document.getElementsByTagName [ “头”] =的innerHTML “”;”

如果你只想要削减任何描述标签,使用

var tags = document.getElementsByTagName('description'); 
for(i=0; i<tags.length; i++){ 
    tags[i].remove(); 
} 
+0

您有没有尝试过您的建议?首先,这不会运行,因为'document.getElementsByTag ['description']'会抛出'无法读取未定义的属性描述。如果你想将它改为'document.getElementsByTagName('description')',那么它仍然不起作用,因为'for .. in'会迭代'length'。 'getElementsByTagName'返回一个实时的HTMLCollection,所以你会跳过元素,并且你将访问不再存在的键。 –

+0

是的,我没有注意到我正在写什么,虽然找到了解决方案,但我立即纠正了它。 – Chr