使用Greasemonkey删除表

时间:2012-08-04 15:59:58

标签: javascript greasemonkey

我正在尝试从简单的html页面删除2个表。该页面只包含2个表,其中包含页面代码:

<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);

请告知

2 个答案:

答案 0 :(得分:1)

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

答案 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<2替换为i<document.getElementsByClassName('details').length以删除所有'详细信息'表,而不仅仅是前两个。

希望这有助于:)