Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery对选择框进行排序_Jquery_Sorting_Drop Down Menu - Fatal编程技术网

使用jQuery对选择框进行排序

使用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"

我在表单上有一个选择框,它带有一个增量rel属性。 我有一个函数,它可以按thier.text()值将选项按字母顺序排序

我的问题是,对于jQuery,如何使用rel属性按升序排序

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