0

いくつかの構文に問題があります。

JS

function sortAlpha(a,b){
       return a.innerHTML > b.innerHTML ? 1 : -1;
};

$('.brick ul li').each(function() {
       $(this).sort(sortAlpha).appendTo('ul');
});

HTML

<div id="studio" class="brick">
<div class="listlist">
<h3 class="title">Studio</h3>
<ul class="list">
    <li class="odd">
        <a href="#">
            <span class="title">Apple</span>
        </a>
    </li>
    <li class="even">
    <span class="title"><a href="#">Cat</span>
            </a>
    </li>
    <li class="odd">
        <span class="title">
                        <a href="#">Bar</span>
        </a>
    </li>
</ul>
</div>
</div>

すべてのリストではなく、$this liそれ自身の親に追加したいul

編集:正しいliと親を選択していることを確認するためです。ありがとう

4

3 に答える 3

1

メソッドを使用しclosest()てDOMをトラバースしUL、親であるを見つけることができます-

$(this).sort(sortAlpha).appendTo($(this).closest('ul'));

http://api.jquery.com/closest/

于 2012-10-18T04:50:09.970 に答える
0

親要素がわからない場合は、これを使用してください

$(this).sort(sortAlpha).appendTo($(this).parent("ul"));

親が DOM ツリーの真上に行くかどうかまだわからない場合は、次を使用します。.closest()

$(this).sort(sortAlpha).appendTo($(this).closest("ul"));

ただし、 をlikeで一意に識別すると、パフォーマンスが向上ulします。id

<ul id="meParent">
   ...
</ul>

それで

$(this).sort(sortAlpha).appendTo("#meParent");
于 2012-10-18T04:46:53.430 に答える
0

htmlとにかく、これを試してみてください。以下に示すように、最初のネストが正しいと仮定して答えましli

<li class="odd">
    <a href="#">
        <span class="title">Apple</span>
    </a>
</li>

作業例はこちら

// Sorter
function sorter(){
    var arr=[], len=$('.brick').find('ul.list li').length;    
    $('.brick ul.list li').each(function(i) {
        var el=$(this).find('a span').text();
        arr.push(el);
        if(i==(len-1))
        {
            arr=sortAlpha(arr);
            var ul=$(this).closest('ul.list').empty();
            $.each(arr, function(k, v){
                var cls=(k%2) ? 'even':'odd',
                li=$('<li/>', {'class':cls}),
                a=$('<a/>',{'href':'#'}).append($('<span/>', {'class':'title'}).text(v));
                ul.append(li.append(a));
            });
        }
    });    
}

//Sort helper
function sortAlpha(list){
    var result = [], map = [];
    for (var i=0, length = list.length; i < length; i++) {
        map.push({ index: i, value: list[i].toLowerCase() });
    }
    map.sort(function(a, b) {
        return a.value > b.value ? 1 : -1;
    });
    for (var i=0, length = map.length; i < length; i++) {
        result.push(list[map[i].index]);
    }
    return result;
} 
于 2012-10-18T06:03:36.320 に答える