2014-01-23 48 views
0

我在同一页面上有几个不同的表,但不幸的是他们没有分配任何唯一的ID。我想使用JS命令删除表,但由于id无法使用,是否可以根据它具有的某个属性删除表?例如,是否有命令删除页面上具有以下属性的所有表格:width =“25%”?在javascript中通过属性删除对象

回答

2

我知道这已经有一些解决方案,但我会提供多一个选择。

var tables = document.getElementsByTagName('table'); 
for(var i = 0; i < tables.length; i++){ 
    if(tables[i].getAttribute('width') == "25%"){ 
     tables[i].parentNode.removeChild(tables[i]); 
    } 
} 

Demo at http://codepen.io/michaelehead/pen/HfdKx

+1

+1一个很好的选择 –

+0

谢谢,我最终不得不使用它,因为在我的情况下,我通过一个android webview显然不支持querySelectorAll运行JS命令。 – Noob

4

您可以使用querySelectorAll来做到这一点。

var x = document.querySelectorAll("table[width='25%']"); 
for (var i=0; i<x.length; i++) { //returns array of elements that match the attribute selector 
    x[i].remove(); //call prototype method defined below 
} 

删除是棘手的,我发现这个代码,使一个很好的删除方法

Element.prototype.remove = function() { 
    this.parentElement.removeChild(this); 
} 
NodeList.prototype.remove = HTMLCollection.prototype.remove = function() { 
    for(var i = 0, len = this.length; i < len; i++) { 
     if(this[i] && this[i].parentElement) { 
      this[i].parentElement.removeChild(this[i]); 
     } 
    } 
} 

这将创建一个迭代的节点,并删除该儿童的原型remove()功能。

请注意,querySelectorAll不会在IE8或以下工作,但原型法的海报说,应该在IE8的工作,但不是7

+0

工作很好,谢谢:) – Noob

0

当然可以。最简单的方法是使用JQuery。 在JavaScript代码中,你会这样写:

$("[attribute=value]").remove() 

所以你的情况可能是这样的$("table[width='25%']").remove()

+1

绝对有效,但他没有要求jQuery的答案。 – SomeKittens

+0

同意。只是试图帮助。 –