4

以下の選択オプションを、-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に追加されました。

リンク

これは、ノート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}]

多少並べ替えているように見えますが、ご覧のとおり、まだ故障しています。

4

2 に答える 2

2

オプションはすでに必要な順序になっているため、次のように並べ替えることができます。

$($(".select_variation option").get().sort(function (a, b) {
    return parseInt(a.value) - parseInt(b.value);
})).appendTo(".select_variation");
于 2013-02-14T01:51:24.157 に答える
0

次のjsfiddleはこの質問を解決します。クレジットは、ExplosionPillsの一般的な支援と、Kolinkのアレイに関する詳細の発見を支援してくれたことに感謝します。ここでvol7ronに感謝します:関数の彼の助けのため
にjqueryオブジェクトの配列をhtmlに変えます。みんなありがとう!

function sortByRationalValue (a,b){
        return a.rationalValue - b.rationalValue;
    }
function returnObjectFromMeasurements(element, text) {
    var obj = {},
        range = text.replace(/["'”″]/g, '').split('-'),
        rational;

    if (range.length > 1)
        rational = eval(range[0]) + eval(range[1]);
    else
        rational = eval(range[0]);

    obj.rationalValue = rational;
    obj.element       = element;
    return obj;
}
jQuery(document).ready(function( $ ) {
    $(".wpsc_select_variation").each(function (index, element) {
        var els = new Array();
        var counter = 0;
        var children = $(element).children();
        $(children).each(function (index, ele) {
            els[index] = returnObjectFromMeasurements(ele, $(ele).text());
        });
        els.sort(sortByRationalValue);
        var elements = new Array();
        $.each(els, function (index, value) {
            elements[index] = value.element;
        });
        $(this).html(elements);
    });
});

http://jsfiddle.net/vwWJ3/5/

于 2013-02-15T15:40:26.513 に答える