2012-06-04 49 views
2

我想使用JavaScript来删除与按钮或输入标签从网页everyhting ...到目前为止我的代码删除其中的一些,我不知道为什么。它仅删除一个复选框出许多,和2个按钮(有3个按钮)JavaScript试图删除某些标签的所有东西

var buttons = document.getElementsByTagName("button"); 
for (var j = 0; j < buttons.length ; j++) 
{ 
    buttons[j].parentNode.removeChild(buttons[j]); 
} 

var checkboxes = document.getElementsByTagName("input"); 
for (var j = 0; j < buttons.length ; j++) 
{ 
    checkboxes[j].parentNode.removeChild(checkboxes[j]); 
} 

回答

2
var checkboxes = document.getElementsByTagName("input"); 
for (var j = 0; j < buttons.length ; j++) // You use the wrong variable here 
{ 
    checkboxes[j].parentNode.removeChild(checkboxes[j]); 
} 

应;

for (var j = 0; j < checkboxes.length ; j++) 

关于向未删除按钮,也许是因为它是一个input type="button",而不是一个<button>

请注意,document.getElementsByTagName("input");将获取和删除后面的所有输入,而不仅仅是复选框!


我可以建议你使用类似jQuery的JavaScript库吗?你可以做的代码,这将一条线,没有任何问题:

$('input[type="button"], input[type="checkbox"], button').remove(); 
+0

AAAAH!这是我第二次在这里发布的东西,因为我拼错的长度!我一定很累。谢谢!! –

+0

@grizzly_beer。大声笑。请注意其他问题......祝你好运! – gdoron

+0

哦,等等,那不是......我累了......:/ –

1

document.getElementsByTagName返回现场NodeList。这意味着,当您删除第一个元素时,a)长度减少,并且b)列表中的(第一个)项目被移位。

有两种可能的解决是:

  • 随时删除最后一个元素。该节点列表是按照文档顺序,以便将工作:

    for (var i=buttons.length-1; i>=0; i--) // var i=buttons.length; while(i--) 
        buttons[i].parentNode.removeChild(buttons[i]); 
    
  • 随时删除第一个元素,并且不要运行索引,直到length

    while (buttons.length) // > 0 
        buttons[0].parentNode.removeChild(buttons[0]); 
    

它也将使用jQuery和co,因为它们将NodeList项目复制到静态数组中。你可以做你自己,以及:

var staticButtons = Array.prototype.slice.call(buttons); 
for (var i=0; i<staticButtons.length; i++) 
    staticButtons[i].parentNode.removeChild(staticButtons[i]); 

,或者你使用返回静态节点列表马上文档选择方法,像querySelector

var staticList = document.querySelectorAll("button, input"); 
相关问题