сортировать список ul по элементу li с помощью jquery? - PullRequest
3 голосов
/ 23 марта 2011

Я создаю горизонтальный список с элементом

  • . Например
    <ul class="list">
        <li>Name</li>
        <li>Surname</li>
        <li>Unit</li>
        <li>City</li>
    </ul>
    <ul class="list">
        <li>John</li>
        <li>Boe</li>
        <li>B.A.</li>
        <li>NY</li>
    </ul>
    <ul class="list">
        <li>Jane</li>
        <li>Doe</li>
        <li>M.A.</li>
        <li>CA</li>
    </ul>
    

    и приведите их в порядок в соответствии с полем Фамилия. Есть ли способ сделать это с помощью jquery?

    Заранее спасибо

    // EDIT //

    код, который я использую, выглядит примерно так

    $.ajax({
        type: 'GET',
        url: 'list.php',
        data: 'id='+id,
        dataType: 'xml',
        success: function(data) {
            var xml;
            if (typeof data == "string") {
                xml = new ActiveXObject("Microsoft.XMLDOM");
                xml.async = false;
                xml.loadXML(data);
            } else {
                xml = data;
            }
    
            $(xml).find('item').each(function(){
                var id = $(this).find("id").text();
                var name = $(this).find("name").text();
                var surname = $(this).find("surname").text();
                var units = $(this).find("units").text();
                var city = $(this).find("city").text();
                $("#listContainer").append('<ul class="list" id="'+id+'"><li style="width:30px;">'+name+'</li><li style="width:100px;">'+surname+'</li><li style="width:100px;">'+units+'</li><li style="width:100px;">'+city+'</li></ul>');
            }); //close each(   
        }
    }); 
    

1 Ответ

5 голосов
/ 31 августа 2011

РАБОЧИЙ ДЕМО

$('.grid ul:gt(0)').each(function() {
    var txt1 = $(this).children('li:eq(1)').text();
    $(this).data('name', txt1);
});

var items = $('.grid ul');
items.sort(function(a, b) {
    var chA = $(a).data('name');
    var chB = $(b).data('name');
    if (chA < chB) return -1;
    if (chA > chB) return 1;
    return 0;
});
var grid = $('.grid');
$(grid).append(items);

и HTML

<div class="grid">
    <ul class="list">
        <li>Name</li>
        <li>Surname</li>
        <li>Unit</li>
        <li>City</li>
    </ul>
    <ul class="list">
        <li>John</li>
        <li>Boe</li>
        <li>B.A.</li>
        <li>NY</li>
    </ul>
    <ul class="list">
        <li>Jane</li>
        <li>Doe</li>
        <li>M.A.</li>
        <li>CA</li>
    </ul>
    <ul class="list">
        <li>Lin</li>
        <li>Zyan</li>
        <li>M.A.</li>
        <li>OR</li>
    </ul>
    <ul class="list">
        <li>Matt</li>
        <li>Albright</li>
        <li>M.A.</li>
        <li>CA</li>
    </ul>
</div>

В результате:

enter image description here

Как это работает:
Мы ищем текст внутри нужного li :eq()
и мы устанавливаем этот текст как jQuery .data () для каждого элемента UL.
Чем мы просто сортируемul по найденному тексту .data () - в алфавитном порядке!

Удачного кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...