<script language=javascript>
  function btnTest_onclick(){
    var testOptions=test.options;
    var i=0;
    for (i=0;i<testOptions.length;i++){
      if (test.options[i].value=="2"){
        test.options.remove(i);
      }
    }
  }
  
</script>
<select name=test size=1>
<option value="1">a</option>
<option value="2">b</option>
</select><input type=button name=btnTest onclick="btnTest_onclick()" value="测 试">

解决方案 »

  1.   

    谢谢!
    不知道还有没有更加直接一点的方法(即不使用循环),比如通过value直接得到option这个对象,然后使用select的removeChild方法来删除
      

  2.   

    得到option这个对象,然后使用select的removeChild方法来删除
    --〉可以
    不通过循环可能比较难
      

  3.   

    我有办法,不过要事先把option的value赋给它的id。<select name=test size=1>
    <option value="1" id="1">a</option>
    <option value="2" id="2">b</option>
    </select>
    <SCRIPT>
    test.removeChild(test.options.all("2"))
    </SCRIPT>有可能重复的情况下这么写:<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title></title>
    </head>
    <body>
    <select name=test size=1>
    <option value="1" id="1">a</option>
    <option value="2" id="2">b</option>
    <option value="1" id="1">a</option>
    <option value="2" id="2">b</option>
    </select>
    <SCRIPT>var ops = test.options.all("2");
    if (ops.length >1)
    for (var i=ops.length-1 ; i>-1; i--)  //记住,要从后面删除起
    test.removeChild(ops[i]);
    else
    test.removeChild(ops);test.appendChild(test.removeChild(test.lastChild)); //这是为了对付IE那个显示紊乱的BUG</SCRIPT>
    </body>
    </html>
      

  4.   

    补充一下,怕你吧option全删了,判断一下:
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title></title>
    </head>
    <body>
    <select name=test size=1>
    <option value="1" id="1">a</option>
    <option value="2" id="2">b</option>
    <option value="1" id="1">a</option>
    <option value="2" id="2">b</option>
    </select>
    <SCRIPT>var ops = test.options.all("2");
    if (ops.length >1)
    for (var i=ops.length-1 ; i>-1; i--)  //记住,要从后面删除起
    test.removeChild(ops[i]);
    else
    test.removeChild(ops);if (test.children.length>0)
    test.appendChild(test.removeChild(test.lastChild)); //这是为了对付IE那个显示紊乱的BUG</SCRIPT>
    </body>
    </html>
      

  5.   

    这个办法好。谢谢。
    不过var ops = test.options.all("2");得到的ops如果只有一个value为2的option,  ops.length这句话会不会出错。我印象中javascript在有多个同名id的对象的时候,会把这些对象自动放在一个数组中,但是如果只有一个唯一id的对象,在对他引用数组的一些方法和属性,好像就会报错了
      

  6.   

    value和序号没有必然的联系,还是觉得用循环好些,弄一堆无用的id摆在上面未见得比循环好些我觉得用楼上 xg_delayth(铁鹰) 的做法,不过循环条件需改一下:序号从大到小进行处理,否则会漏掉一些