<script> function delFromLast(){ var s=document.getElementById("a"); for(var i=s.options.length;i>=0;i--){ s.remove(i);//最后结果是option全部删除, } } function delFromFirst(){ var s=document.getElementById("a"); for(var i=0;i<s.options.length;i++){ s.remove(i);//最后结果是留下2.4.6三项。因为remove(0)时,原来的1会放置到0的位置,后面的也逐个前移,然后remove(1)时,其实 //是remove的2.这里跟数组的结构有关,因为数组是不允许有洞的。 } } var oldOptions=null; var oldOptionReal=new Array(); function add(){ var s=document.getElementById("a"); s.options.length=0; alert(oldOptions.length);//此时为0,所以下面不会执行。此处可以发现对象是引用对象还是值对象。在C#中,数组中一般是保存了值对象,这样看来js中也是一///样,而java中数据则还是保存的引用。当然c#中可以显式的设置要保存引用还是值。 for(var i=0;i<oldOptions.length;i++){ s.add(oldOptions[i]); } } function addReal(){ var s=document.getElementById("a"); s.options.length=0; alert(oldOptionReal.length);//此时为6,所以下面顺利的将所有option再加入到select中 for(var i=0;i<oldOptionReal.length;i++){ alert(oldOptionReal[i].text); s.add(oldOptionReal[i],4);//注意此处有兼容问题。 /* IE: s.add(options[i]) 在最后面加入一个options s.add(optons[i],null) 报错 Other: s.add(options[i],null)在最后面加入一个options s.add(options[i],2)都是在指定index上加入一个options.如果当前select的最大index比这个值小,取最大index。 */ } } </script> </HEAD> <BODY> <select id="a"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> </select> <input onclick="delFromLast();" type="button"/> <input onclick="delFromFirst();" type="button"/> <input onclick="add();" type="button"/> <input onclick="addReal();" type="button"/> <script> oldOptions=document.getElementById("a").options; for(var i=0;i<oldOptions.length;i++){ oldOptionReal.push(oldOptions[i]); } </script>