1

我正在尝试按选择框中的值对选项进行排序。使用下面的代码可以很好地进行排序。但是我的选项值为 null,它会下降到应该在顶部的底部。

$(this).html($("option", $(this)).sort(function(a, b) { 
    var arel = parseInt($(a).attr('value'), 10);
    var brel = parseInt($(b).attr('value'), 10);
    return arel == brel ? 0 : arel < brel ? -1 : 1 
}));

资料来源:使用 jQuery 对选择框进行排序

实际结果:

<select name="option[285]">
<option value="298">Blazing Yellow</option>
<option value="299">Jet Black</option>
<option value="300">Tabacco Brown</option>
<option value="301">Optical White</option>
<option value="302">Fiery Red </option>
<option value="" selected="selected"> --- Please Select --- </option>
</select>

预期结果:

<select name="option[285]">
<option value="" selected="selected"> --- Please Select --- </option>
<option value="298">Blazing Yellow</option>
<option value="299">Jet Black</option>
<option value="300">Tabacco Brown</option>
<option value="301">Optical White</option>
<option value="302">Fiery Red </option>
</select>
4

1 回答 1

3

问题似乎是parseInt('')给定NaN的,当比较使用时arel < brel给出错误的结果

$(this).html($("option", $(this)).sort(function(a, b) { 
    var arel = parseInt($(a).attr('value'), 10) || 0;
    var brel = parseInt($(b).attr('value'), 10)|| 0;
    return arel == brel ? 0 : arel < brel ? -1 : 1 
}));

演示:小提琴

于 2013-07-27T13:24:17.837 回答