我想按计算出的分数值对以下选择选项进行排序,但不包括--please select--选项。

<select class="wpsc_select_variation">
<option value="0">-- Please Select --</option>
<option value="13">1"</option>
<option value="21">2''</option>
<option value="11">3/4"</option>
<option value="6">3/8"</option>
<option value="10">5/8"</option>
<option value="17">1-1/2''</option>
<option value="15">1-1/4''</option>
<option value="19">1-3/4''</option>
<option value="7">1/2"</option>
</select>

到目前为止,我整理的代码:
为了简洁和历史起见,已添加到pastebin中。
Link

这将解释音符1数组的长度为3。
但是为什么是3?为什么不是9?
为什么Chrome浏览器显示完整数组,但长度仍为3,而Firefox单击父+却显示完整数组,但父却显示undefined,option,option?

困惑...

编辑:
编辑以允许多个选择框:
如果我错了纠正我。
$(".wpsc_select_variation").each(function(index, element){
        $($(element).children().get().sort(function (a, b) {
        return parseInt(a.value) - parseInt(b.value);
        })).appendTo($(element));
    });

使用对象的最新编辑。
开始:
var els = new Array();
var counter = 0;
$j("select.wpsc_select_variation option").each(function(index, ele){
var obj = new Object;
var i = $j(ele).text();
i = i.replace("\"", "");
i = i.replace("''", "");
if (i.indexOf("-") >= 0){
    i = i.split('-');
    split = i[1].split('/');
    i = eval(i[0]) + split[0] / split[1];
}
else if(i.indexOf("/") >= 0){
    split = i.split('/');
    i = split[0] / split[1];
}
i = eval(i);
obj.ind = i;
obj.ele = ele;
els[counter] = obj;
counter++;
});
els.sort(function (a, b) { return parseInt(a.ind) - parseInt(b.ind) });
console.log(els);

上面的结果是:
[Object { ind=NaN,  ele=option}, Object { ind=0.75,  ele=option}, Object { ind=0.375,  ele=option}, Object { ind=0.625,  ele=option}, Object { ind=0.5,  ele=option}, Object { ind=1,  ele=option}, Object { ind=1.5,  ele=option}, Object { ind=1.25,  ele=option}, Object { ind=1.75,  ele=option}, Object { ind=2,  ele=option}]

似乎对它们进行了某种排序,但是如您所见,它们仍然没有排序。

最佳答案

由于选项值已经按照需要的顺序排列,因此您可以对这些值进行排序:

$($(".select_variation option").get().sort(function (a, b) {
    return parseInt(a.value) - parseInt(b.value);
})).appendTo(".select_variation");

08-03 20:21
查看更多