Упорядочивание элементов по номеру в JQuery - PullRequest
0 голосов
/ 02 ноября 2009

как я могу расположить следующие div по значению в количестве атрибута с помощью jquery? Спасибо.

<a href="#" id="id1" class="lTest" amount="12">
    <div>abcd1</div>
<a/>

<a href="#" id="id2" class="lTest" amount="64">
    <div>abcd2</div>
<a/>

<a href="#" id="id3" class="lTest" amount="32">
    <div>abcd3</div>
<a/>

<a href="#" id="id4" class="lTest" amount="8">
    <div>abcd4</div>
<a/>

Ответы [ 4 ]

1 голос
/ 02 ноября 2009

Это должно сработать.

<!doctype html>
<html>
    <head>
        <script src='jquery.js'></script>
        <script>
            $(document).ready(init);

            function init() {
                var parent = $('#someid');
                var children = $('a', parent);
                children.sort(function(a, b) {
                   return parseInt($(a).attr('amount')) - parseInt($(b).attr('amount'));
                })
                $.each(children, function(i, child) {
                    parent.append(child);
                });
            }
        </script>
    </head>
    <body>
        <div id="someid">
            <a href="#" class="lTest" amount="12"><div>abcd2</div></a>
            <a href="#" class="lTest" amount="64"><div>abcd4</div></a>
            <a href="#" class="lTest" amount="32"><div>abcd3</div></a>
            <a href="#" class="lTest" amount="8"><div>abcd1</div></a>
        </div>
    </body>
</html>

[Изменить] Заменено SSCCE , чтобы доказать, что оно работает Я изменил x в abcdx на ожидаемый порядок. В итоге вы должны получить abcd1, abcd2, abcd3 и abcd4 в этом порядке.

0 голосов
/ 03 ноября 2009

Ваш первый комментарий к ответу Тинистера показывает, что ваша тестовая страница ничего не знает о JQuery. Убедитесь, что вы правильно включили JQuery в свои тесты и что HTML правильно построен. Тогда вы, вероятно, обнаружите, что один из других ответов работает.

John

0 голосов
/ 02 ноября 2009

сначала предположим, что теги окружены div (id = "testDiv")

Извините, мой первоначальный способ сделать это неправильно ...

НЕ ДЕЛАЙТЕ ЭТОГО: БРОШЕНО !!! (См. Правку ниже)

var testDiv = $ ('# testDiv'); var children = testDiv.children ('. lTest'); children.each (function () {$ (this) .remove ();}); var testArray = $ .makeArray (children); testArray.sort (функция (а, б) { return parseInt ($ (a) .attr ('сумма')) - parseInt ($ (b) .attr ("сумма"); });

children.each (function () {testDiv.append (this);});

РЕДАКТИРОВАТЬ: ЭТО РАБОЧАЯ ВЕРСИЯ:

var testDiv = $('#testDiv');
var children = testDiv.children('.lTest').remove();

children = children.sort(function(a,b){
  return parseInt($(a).attr('amount')) - parseInt($(b).attr('amount'));
});

testDiv.append(children);
0 голосов
/ 02 ноября 2009

Попробуйте это:

var links = $('a.lTest').sort( function(a,b) { return $(a).attr('amount') - $(b).attr('amount'); } );

for ( var i = 1; i < links.length; i++ ) {
    links.eq(i-1).insertBefore( links.eq(i) );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...