使用javascript / jQuery对选择列表中的选项进行排序..但不是按字母顺序排序

我正在寻找一个函数,它将选择一个选项列表中的选项列表,并按字母顺序排序,但有一个扭曲。 带有文本“NA”的所有值都应该被推到列表的底部。

所以给出一个清单 –

 Car Bus NA Bike Tractor NA  

我们最终应该 –

  Bike Bus Car Tractor NA NA  

NA的顺序并不重要。

并且不要问为什么我不能只删除NAs(或者为什么会有几个选项使用相同的文本但不同的基础值,因为我也不同意它。

演示: http : //jsfiddle.net/4bvVz/

 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'); 
 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 ); })); 

如果页面中有多个选择(多个选择),请使用以下命令:

 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)); }); 

我对原始function进行了一些更改,并且工作正常。

 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');