2014-03-03 46 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; 
}))