问题描述
<html><head><script type="text/javascript"> function getColumn(){ var d=new Array(); d= document.getElementById("column").childNodes; for(var i=0 ;i < d.length; i++){ document.getElementById("column").removeChild(d.item(i)); } var name=document.getElementById("tableName").value; var column=document.getElementById("column"); } </script></head><body> <input type="button" value="button"onclick="getColumn()"> <select id="column" size=8 multiple> <option>ddd</option> <option>eee</option> <option>aaa</option> </select></body></html>为什么点按钮没有一次性删除
解决方案
<html> <head> <script type="text/javascript"> function getColumn(){ document.getElementById("column").options.length=0; } </script> </head> <body> <input type="button" value="button"onclick="getColumn()"> <select id="column" size=8 multiple> <option>ddd</option> <option>eee</option> <option>aaa</option> </select> </body> </html> 本地已测!
解决方案二:
之所以用一个变量var len;是因为option数组在删除的时候数量变了,把数组长度赋值给这个变量就不会出现变化而你要删除所有,那么所做的循环次数应该跟数组长度一样,所以先确定要循环多少次,循环体直接循环删除option数组的第一个元素
解决方案三:
option数组本身提供了删除方法remove()传递一个参数,就是option的下标,从0开始
解决方案四:
function getColumn(){ var d = document.getElementById("column").options; var len = d.length; for(var i=0 ;i < len; i++){ alert(d[0].text); d.remove(0); } } 这样就可以了首先,拿到所有option,是一个数组,不用先new Array(),这是多余的,浪费内存,虽然不多,但没必要。其次,删除的时候option数组是在变化的,所以一直删除下标为0的那个,也就是删除一直第一个就可以了,不然删不完
解决方案五:
for(var i=0 ;i < d.length; i++) 这一句,你取得是d.length,当你删除一项的时候,这个数值减一,所以不可能完全删除。在此基础上的修改为:for(var i=0 ;i < d.length;) 就能完全删除
解决方案六:
这样就删除了。<html><head><script type="text/javascript"> function getColumn(){ var d= document.getElementById("column"); var len=d.length; for(var i=len-1 ;i >=0; i--){ document.getElementById("column").removeChild(d.options[i]); } var column=document.getElementById("column"); } </script></head><body> <input type="button" value="button"onclick="getColumn()"> <select id="column" size=8 multiple> <option>ddd</option> <option>eee</option> <option>aaa</option> </select></body></html>
解决方案七:
删节点用倒序删除.比如说现有一个树有3个节点.节点下标分别为0, 1, 2.你用正序的话, 就是从0循环到2, 执行三次第一次执行, 会删除下标为0的节点.这个时候树剩下二个节点, 这二个节点自动向前补进一位.从1, 2变成0, 1.第二次执行的时候, 会删除下标为1的节点.这个时候树剩下下标为0的节点.第三次执行的时候, 会删除下标为2的节点.但树里面没有下标为2的节点, 没完成删除操作.循环结束, 树里面还剩下下标为0这个节点.