我正在寻找一个函数,它将在选择列表中选择一个选项列表,并按字母顺序对它们进行排序。所有带有“NA”文本的值都应该被推到列表的底部。
所以给出一个清单 -
<select>
<option value="1">Car</option>
<option value="2">Bus</option>
<option value="3">NA</option>
<option value="4">Bike</option>
<option value="5">Tractor</option>
<option value="6">NA</option>
</select>
我们应该以 -
结束<select>
<option value="4">Bike</option>
<option value="2">Bus</option>
<option value="1">Car</option>
<option value="5">Tractor</option>
<option value="3">NA</option>
<option value="6">NA</option>
</select>
NA的顺序并不重要。
并且不要问为什么我不能只删除NAs(或者为什么会有几个选项使用相同的文本但不同的基础值,因为我也不同意。< / p>
答案 0 :(得分:45)
function NASort(a, b) {
if (a.innerHTML == 'NA') {
return 1;
}
else if (b.innerHTML == 'NA') {
return -1;
}
return (a.innerHTML > b.innerHTML) ? 1 : -1;
};
$('select option').sort(NASort).appendTo('select');
答案 1 :(得分:16)
var sb = $('select');
sb.append(sb.find('option').sort(function(a, b){
return (
a = $(a).text(),
b = $(b).text(),
a == 'NA' ? 1 : b == 'NA' ? -1 : 0|a > b
);
}));
答案 2 :(得分:1)
如果页面中有多个选择(多个选择),请使用:
function NASort(a, b) {
if (a.innerHTML == 'NA') {
return 1;
}
else if (b.innerHTML == 'NA') {
return -1;
}
return (a.innerHTML > b.innerHTML) ? 1 : -1;
};
$('select').each(function( index ) {
$(this).find('option').sort(NASort).appendTo($(this));
});
答案 3 :(得分:1)
我对原始功能进行了一些更改,但效果很好。
function NASort(a, b) {
console.log(a.innerHTML.substr(0, 1).toLowerCase() + ' > ' + b.innerHTML.substr(0, 1).toLowerCase());
return (a.innerHTML.substr(0, 1).toLowerCase() > b.innerHTML.substr(0, 1).toLowerCase()) ? 1 : -1;
};
$('select option').sort(NASort).appendTo('select');