我的客户要求我(一个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的切换选项是什么?
答案 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>