2014-03-03 43 views
1

我想this solution理清一個下拉菜單,但在選項有兩個數字,14和11來排序下拉選項

我應該如何處理這8日前和9?

我的代碼如下:

<select id="test"> 
    <option>Size 9</option> 
    <option>Size 14</option> 
    <option>Size 8</option> 
    <option>Size 11</option> 
</select> 

$("#test").html($("#test option").sort(function (a, b) { 
    return a.text == b.text ? 0 : a.text < b.text ? -1 : 1; 
})) 

我需要一個解決方案來下拉排序,即使有隻有文字,沒有混合。

jsfiddle

+0

你能說清楚你的意思是「只有字符」嗎?你的意思是「小」,「中」和「大」之類的東西嗎? – benjaminjosephw

+0

您正在比較字符串。 「尺寸14」始終位於「尺寸9」之前的第一位。爲選項設置數值,以便按數字排序。 – Justinas

+0

你想排序字符串或數字 –

回答

4

你可以使用下面的代碼片段,其BTW將每個選項的設定值:

DEMO jsFiddle

$("#test").html($("#test option").val(function(){ 
    return this.text.match(/\d+/); 
}).sort(function (a, b) { 
    var a = parseInt(a.value,10), b = parseInt(b.value,10); 
    return a < b ? -1 : 1; 
})); 

或者沒有設定值:

DEMO

$("#test").html($("#test option").sort(function (a, b) { 
    var a = parseInt(a.text.match(/\d+/),10), b = parseInt(b.text.match(/\d+/),10); 
    return a < b ? -1 : 1; 
})); 

編輯:(以下注釋)

你可以跳過排序這樣的默認選項:

DEMO

$("#test").html($("#test option").val(function (i) { 
    return i !== 0 ? this.text.match(/\d+/) : this.value; 
}).sort(function (a, b) { 
    var a = parseInt(a.value !== ""?a.value:-1, 10), 
     b = parseInt(b.value, 10); 
    return a < b ? -1 : 1; 
})); 
+0

謝謝;我如何讓它忽略第一個選項'選項類=「」值=「」> - 選擇一個大小 -'?因爲這也正在分揀。 – Chris

0

您可以通過值排序

HTML

<select id="test"> 
    <option value='9'>Size 9</option> 
    <option value='14'>Size 14</option> 
    <option value='8'>Size 8</option> 
    <option value='11'>Size 11</option> 
</select> 

JS

$("#test").html($("#test option").sort(function (a, b) { 
    return parseInt($(a).val()) == parseInt($(b).val()) ? 0 : parseInt($(a).val()) < parseInt($(b).val()) ? -1 : 1; 
})); 

DEMO

0

當你比較文本兩個文本字段,包含一些數字。 比較僅適用於第一個數值。

例如:如果我們比較尺寸9尺寸14,那麼你就可以得到這樣的尺寸令人驚訝的結果9比大小14這是因爲只有第一個數值被比較,所以14的值是數字越大值爲1.

對您而言,一個簡單的解決方案可能是將值字段應用於選項並將值用於比較。

<select id="test"> 
    <option value ="9">Size 9</option> 
    <option value ="14">Size 14</option> 
    <option value ="8">Size 8</option> 
    <option value ="11">Size 11</option> 
</select> 

$("#test").html($("#test option").sort(function (a, b) { 
    return parseInt(a.value,10) == parseInt(b.value,10) ? 0 : parseInt(a.value,10) < parseInt(b.value,10) ? -1 : 1; 
}))