2012-08-04 52 views
0

我想从简单的HTML页面中删除2个表。该页面只包含2台,继承人的网页代码:使用Greasemonkey删除表

<html> 
<body> 
<h3>Table 1</h3> 

<table class="details" border="1" cellpadding="0" cellspacing="0"> 
<tbody><tr> 
<th>1</th> 
<td>2</td> 
</tr> 
</tbody></table> 

<h3>Table 2</h3> 

<table class="details" border="1"> 
<tbody><tr> 
<th>1</th> 
<td>2</td> 
</tr><tr> 
<th>3</th> 
<td>4</td> 
</tr> 
</tbody></table> 

</body> 
</html> 

我使用没有问题,去除其中的一个表:

var elmDeleted = document.getElementsByClassName('details').item(0); 
elmDeleted.parentNode.removeChild(elmDeleted); 

var elmDeleted = document.getElementsByClassName('details').item(1); 
elmDeleted.parentNode.removeChild(elmDeleted); 

但我无法删除这两个表都在我的用户脚本中使用这些命令:

var elmDeleted = document.getElementsByClassName('details').item(0); 
elmDeleted.parentNode.removeChild(elmDeleted); 
var elmDeleted = document.getElementsByClassName('details').item(1); 
elmDeleted.parentNode.removeChild(elmDeleted); 

请指教

回答

1

删除旧表#0后,旧表#1成为新表#0。因此,如果你试图获得表#1,它会失败。

1

塞巴斯蒂安的答案真的是你要寻找的答案,但为了清楚起见,我会告诉你如何能做到这一点: 你既可以做

var elmDeleted = document.getElementsByClassName('details').item(0); 
elmDeleted.parentNode.removeChild(elmDeleted); 
var elmDeleted = document.getElementsByClassName('details').item(0); 
elmDeleted.parentNode.removeChild(elmDeleted); 

关注的事实,我两次都删除了.item[0];它会同时删除页面上的第一个。 否则,这样的:

var elmDeleted = document.getElementsByClassName('details').item(1); 
elmDeleted.parentNode.removeChild(elmDeleted); 
var elmDeleted = document.getElementsByClassName('details').item(0); 
elmDeleted.parentNode.removeChild(elmDeleted); 

...这将删除第二个,然后是第一个。

要(我称之为)整齐:(==更紧凑)

for(i=0;i<2;i++)(temp=document.getElementsByClassName('details').item(0)).parentNode.removeChild(temp); 

作为一个方面说明,既然你说还会有2只在页面上表,可以更换每document.getElementsByClassName('details')document.getElementsByTagName('table')

而且,在我的精简版本,你可以用i<document.getElementsByClassName('details').length代替i<2删除所有“detail'桌,而不是仅仅在第2位。

希望这有助于:)