在Internet Explorer中交换选项框?

时间:2008-12-31 21:30:59

标签: javascript internet-explorer

我的客户要求我(一个JavaScript客户端程序员)更改选项的顺序,以便在页面加载时公司的选项显示在选择框的顶部。

以下代码适用于Firefox,但在尝试交换两个选项时在Internet Explorer 7中失败:

    function load{
        var shippingLocation  = document.getElementById("location");
        var swap = null;

        var initiallyFirstItem = shippingLocation.options[0].cloneNode(true);

        var lastPos = null;

        for(var i = 0; i < shippingLocation.length; i++)
        {
            if(shippingLocation.options[i].value == "XETEX")
            {
                swap = shippingLocation.options[i];
                lastPos = i;
                break;
            }
        }
        console.debug("sl: " + shippingLocation.options[0]);
        console.debug("s: " + swap);
        shippingLocation.options[0] = swap;
        shippingLocation.options[lastPos] = initiallyFirstItem;
        shippingLocation.selectedIndex = 0;
    }

我从底部第三行的下一行收到错误:

shippingLocation.options[0] = swap;

错误指出“对象不支持此属性或方法”。

Internet Explorer的切换选项是什么?

2 个答案:

答案 0 :(得分:1)

啊,我们走了。比上面的代码更优雅。

function swapOptions(obj,i,j){
    var o = obj.options;
    var i_selected = o[i].selected;
    var j_selected = o[j].selected;
    var temp = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
        var temp2= new Option(o[j].text, o[j].value, o[j].defaultSelected, o[j].selected);
    o[i] = temp2;o[j] = temp;o[i].selected = j_selected;o[j].selected = i_selected;
}

答案 1 :(得分:1)

好吧,我做了一些测试,我相信IE认为options数组是不可变的(在某种程度上)。您可以编辑选项,但可以删除它们,但不能将一个选项设置为另一个选项。

所以当你这样做时:

  shippingLocation.options[0] = swap;

IE抱怨是因为你试图将一个选项设置为另一个选项。

我会这样做:

> Removed due to excessive stupidity on
> my part. :P

这是一个更好的方法:

<script type="text/javascript">
function swap(obj,i,j) {
    sib=obj.options[i].nextSibling;
    obj.insertBefore(obj.options[i],obj.options[j]);
    obj.insertBefore(obj.options[j],sib);
}
</script>