使用jQuery对选择框进行排序
我在表单上有一个选择框,它带有一个增量rel属性。 我有一个函数,它可以按thier.text()值将选项按字母顺序排序 我的问题是,对于jQuery,如何使用rel属性按升序排序使用jQuery对选择框进行排序,jquery,sorting,drop-down-menu,Jquery,Sorting,Drop Down Menu,我在表单上有一个选择框,它带有一个增量rel属性。 我有一个函数,它可以按thier.text()值将选项按字母顺序排序 我的问题是,对于jQuery,如何使用rel属性按升序排序 <option rel="1" value="ASHCHRC">Ashchurch for Tewkesbury </option> <option rel="2" value="EVESHAM">Evesham </option> <option rel="3"
<option rel="1" value="ASHCHRC">Ashchurch for Tewkesbury </option>
<option rel="2" value="EVESHAM">Evesham </option>
<option rel="3" value="CHLTNHM">Cheltenham Spa </option>
<option rel="4" value="PERSHOR">Pershore </option>
<option rel="5" value="HONYBRN">Honeybourne </option>
<option rel="6" value="MINMARS">Moreton-in-Marsh </option>
<option rel="7" value="GLOSTER">Gloucester </option>
<option rel="8" value="GTMLVRN">Great Malvern </option>
<option rel="9" value="MLVRNLK">Malvern Link </option>
特克斯伯里的阿什彻奇
伊夫沙姆
切尔滕纳姆温泉酒店
近海
霍尼伯恩
沼泽中的莫顿
格洛斯特
大马尔文
马尔文链接
我的排序函数:var对象;可以是整个表单中多个选择框之一
$(object).each(function() {
// Keep track of the selected option.
var selectedValue = $(this).val();
// sort it out
$(this).html($("option", $(this)).sort(function(a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}));
// Select one option.
$(this).val(selectedValue);
});
$(对象)。每个(函数(){
//跟踪所选选项。
var selectedValue=$(this.val();
//解决它
$(this).html($($(选项),$(this)).sort(函数(a,b){
返回a.text==b.text?0:a.text
如果要按rel排序,应更改函数
$(this).html($("option", $(this)).sort(function(a, b) {
var arel = $(a).attr('rel');
var brel = $(b).attr('rel');
return arel == brel ? 0 : arel < brel ? -1 : 1
}));
$(this).html($(“选项”,$(this)).sort(函数(a,b){
var arel=$(a).attr('rel');
var brel=$(b).attr('rel');
返回arel==brel?0:arel
使用parseInt()编辑
$(this).html($(“选项”,$(this)).sort(函数(a,b){
var arel=parseInt($(a).attr('rel'),10);
var brel=parseInt($(b).attr('rel'),10);
返回arel==brel?0:arel
您可以使用.attr()函数获取jQuery中属性的值。有关更多信息,请参阅
试试这个:
$(object).each(function() {
// Keep track of the selected option.
var selectedValue = $(this).val();
// sort it out
$(this).html($("option", $(this)).sort(function(a, b) {
var aRel = $(a).attr("rel");
var bRel = $(b).attr("rel");
return aRel == bRel ? 0 : aRel < bRel ? -1 : 1
}));
// Select one option.
$(this).val(selectedValue);
});
$(对象)。每个(函数(){
//跟踪所选选项。
var selectedValue=$(this.val();
//解决它
$(this).html($($(选项),$(this)).sort(函数(a,b){
var aRel=$(a).attr(“rel”);
var-bRel=$(b).attr(“rel”);
返回aRel==bRel?0:aRel
试试这个
$(document).ready(function()
{
var myarray=new Array();
$("select option").each(function()
{
myarray.push({value:this.value, optiontext:$(this).text()});
});
myarray.sort(sortfun);
$newHmtl="";
for(var i=0;i<myarray.length;i++)
{
$newHmtl+="<option rel='1' value='"+myarray[i]['value']+"'>"+myarray[i]['optiontext']+"</option>";
}
$("select").html($newHmtl);
});
function sortfun(a,b)
{
a = a['value'];
b = b['value'];
return a == b ? 0 : (a < b ? -1 : 1)
}
$(文档).ready(函数()
{
var myarray=新数组();
$(“选择选项”)。每个(函数()
{
myarray.push({value:this.value,optiontext:$(this.text()});
});
myarray.sort(sortfun);
$newHmtl=“”;
对于(var i=0;ii),我需要一个类似的解决方案,然后制作对原始功能进行了一些更改,效果良好
function NASort(a, b) {
return (a.innerHTML.toLowerCase() > b.innerHTML.toLowerCase()) ? 1 : -1;
};
$('select option').sort(NASort).appendTo('select');
为便于将来参考,如果选项
包含数据或道具(例如.prop('selected',true)
),则接受的答案不完整。使用.html()
后,这些数据或道具将被删除
下面的功能可能未优化,但工作正常:
$.fn.sortChildren = function(selector, sortFunc) {
$(this)
.children(selector)
.detach()
.sort(sortFunc)
.appendTo($(this));
};
$('select').sortChildren('option', function(a, b) {
// sort impl
});
如果rel总是数字的,你应该parseInt()
它-否则顺序将是1,10,11,12,2,3,4…
我如何将parseInt()实现到上面的函数中?是的,那更好,第一个函数抛出了一些奇怪的结果,就像Rory指出的,parseInt()是必需的:DMost decreated!在不需要迭代多个选择的一般情况下,$('select').children().detach().sort(sortFunc).appendTo($('select'))
工作得很好。不过,要注意子项中的选项和optgroup
。
$.fn.sortChildren = function(selector, sortFunc) {
$(this)
.children(selector)
.detach()
.sort(sortFunc)
.appendTo($(this));
};
$('select').sortChildren('option', function(a, b) {
// sort impl
});