Javascript 客户端内部排序<;李>;标记值

Javascript 客户端内部排序<;李>;标记值,javascript,jquery,client-side,Javascript,Jquery,Client Side,我有一个像这样的HTML <div> <ul id="ulId"> <li id="liId1"> <span id="spn1-Li1">YVariable1</span> <span id="spn2-Li1">XVariable2</span> <span id="spn3-Li1">ZVariable3</span>

我有一个像这样的HTML

<div>
<ul id="ulId">
    <li id="liId1">
        <span id="spn1-Li1">YVariable1</span>
        <span id="spn2-Li1">XVariable2</span>
        <span id="spn3-Li1">ZVariable3</span> 
    </li>
    <li id="liId2">
        <span id="spn1-Li2">ZVariable1</span>
        <span id="spn2-Li2">YVariable2</span>
        <span id="spn3-Li2">XVariable3</span> 
    </li>
    <li id="liId3">
        <span id="spn1-Li3">XVariable1</span>
        <span id="spn2-Li3">ZVariable2</span>
        <span id="spn3-Li3">YVariable3</span> 
    </li>
</ul>
</div>
YVariable1 XVariable2 ZVariable3
ZVariable1 YVariable2 XVariable3
XVariable1 ZVariable2 YVariable3
但是我需要根据第一个跨度值对结果进行排序,剩余的“
  • ”应该是相同的。表示单击“按按钮排序”后的结果应如下所示

    我需要在客户端(javascript或jQuery)中使用它。 我尝试了多种方法,但没有达到我的预期

    我现在有了这段代码,同样的代码也改变了类似的方式

    $('#btnOrderBy').click(function () {
        var data = [];
        $('#ulId li').each(function (item, value) {
            $('span', value).each(function (i, v) {
                data.push($(this).text());
            });
        });
        console.log(data.sort());
    });
    
    这是下列文件的副本:

    var items=$('li').get();
    项目.排序(功能(a,b){
    var keyA=$(a).text();
    var keyB=$(b).text();
    if(keyAkeyB)返回1;
    返回0;
    });
    var ul=$('ul');
    $。每个(项目、功能(i、li){
    ul.附加(li);
    });
    

    这是以下内容的副本:

    var items=$('li').get();
    项目.排序(功能(a,b){
    var keyA=$(a).text();
    var keyB=$(b).text();
    if(keyAkeyB)返回1;
    返回0;
    });
    var ul=$('ul');
    $。每个(项目、功能(i、li){
    ul.附加(li);
    });
    
    我使用了这个代码

    $('#ulId').html($("#ulId li").sort(asc_sort));
    function asc_sort(a, b){
        return ($(b).find('span:first-child').text()) < ($(a).find('span:first-child').text()) ? 1 : -1;    
    }
    
    $('ulId').html($('ulId li').sort(asc#u sort));
    函数asc_排序(a,b){
    返回($(b).find('span:first child').text())<($(a).find('span:first child').text())?1:-1;
    }
    
    我使用了这个代码

    $('#ulId').html($("#ulId li").sort(asc_sort));
    function asc_sort(a, b){
        return ($(b).find('span:first-child').text()) < ($(a).find('span:first-child').text()) ? 1 : -1;    
    }
    
    $('ulId').html($('ulId li').sort(asc#u sort));
    函数asc_排序(a,b){
    返回($(b).find('span:first child').text())<($(a).find('span:first child').text())?1:-1;
    }
    

    如果您希望保持
    LI
    的位置,并且只对跨度进行排序,则可以这样做

    首先存储排序顺序

    var orderArr = [];
    $('#ulId span:nth-child(1)').sort(function(a,b){
        var aa = $(a).text();
        var bb = $(b).text();
        orderArr.push(aa < bb ? -1 : aa > bb ? 1 : 0);
    });
    
    然后您可以循环并将它们附加到each
    LI

    $('#ulId li').each(function(i,v){
       $(v).append(spans[i]);
    });
    

    或者,如果您想根据跨度对li进行排序,您可以这样做

    $('#ulId li').sort(function(a,b){
        var aa = $(a).find('span:first-child').text();
        var bb = $(b).find('span:first-child').text();
        return aa<bb ? -1 : aa>bb ? 1 : 0;
    }).appendTo('#ulId');
    
    $('#ulId li').sort(函数(a,b){
    var aa=$(a).find('span:first child').text();
    var bb=$(b).find('span:first child').text();
    返回aabb?1:0;
    }).appendTo('ulId');
    

    如果您希望保持
    LI
    的位置,并且只对跨度进行排序,则可以这样做

    首先存储排序顺序

    var orderArr = [];
    $('#ulId span:nth-child(1)').sort(function(a,b){
        var aa = $(a).text();
        var bb = $(b).text();
        orderArr.push(aa < bb ? -1 : aa > bb ? 1 : 0);
    });
    
    然后您可以循环并将它们附加到each
    LI

    $('#ulId li').each(function(i,v){
       $(v).append(spans[i]);
    });
    

    或者,如果您想根据跨度对li进行排序,您可以这样做

    $('#ulId li').sort(function(a,b){
        var aa = $(a).find('span:first-child').text();
        var bb = $(b).find('span:first-child').text();
        return aa<bb ? -1 : aa>bb ? 1 : 0;
    }).appendTo('#ulId');
    
    $('#ulId li').sort(函数(a,b){
    var aa=$(a).find('span:first child').text();
    var bb=$(b).find('span:first child').text();
    返回aabb?1:0;
    }).appendTo('ulId');
    

    重复,因此您只想对跨距进行排序。。还是整个李?真的谢谢你的帮助。我得到了我期望的答案。重复的,所以你只想对跨度进行排序。。还是整个李?真的谢谢你的帮助。我得到了我期待的答案。