я не могу понять "функцию сортировки" - PullRequest
0 голосов
/ 21 апреля 2011

этот вопрос может быть легко для вас .. но я новичок в JavaScript

я не могу понять эту часть в функции

kids.sort (функция (n, m)

что н и м ?? и как я могу понять этот вид функций

тыс.

<script>
function sortkids(e) {
     if (typeof e == "string") e = document.getElementById(e);
     var kids = [];
     for(var x = e.firstChild; x != null; x = x.nextSibling)
         if (x.nodeType == 1) kids.push(x);
     kids.sort(function(n, m) { 
                   var s = n.firstChild.data; 
                   var t = m.firstChild.data;
                   if (s < t) return -1;    
                   else if (s > t) return 1;  
                   else return 0;           
               });

     for(var i = 0; i < kids.length; i++) e.appendChild(kids[i]);
}
</script>
<ul id="list"> 
<li>one<li>two<li>three<li>four <!-- items are not in alphabetical order -->
</ul>
<button onclick="sortkids('list')">Sort list</button>

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

.sort выполняет фактическую сортировку для вас, то есть перемешивание элементов внутри массива..sort Что вы должны сказать, это , как вы хотите отсортировать элементы.Вы делаете это, предоставляя функцию, которая принимает два параметра и возвращает в качестве информации, какой из двух параметров вы считаете «большим» или «меньшим», или оба равны (с возвращаемыми значениями -1, 0 и 1).

.sort проходит через массив, передавая два элемента за раз в вашу функцию, спрашивая «какой из них больше?» , сортируя массив на основе ответа.Это повторяется до тех пор, пока массив не будет отсортирован.

1 голос
/ 21 апреля 2011

n и m будут элементами из массива. Функция будет вызываться повторно с различными элементами массива для сравнения, и ожидается, что она вернет значение, указывающее, меньше ли n, больше или равно m. Это позволяет sort выполнять сортировку массива, даже если sort ничего не знает об элементах. Все, что нужно знать, это от функции, которую вы передаете.

Что этот код делает, так это помещает элементы DOM в массив, а затем сортирует его, что приведет к сортировке только элементов в массиве, а не в DOM. Итак, бит в конце, выполняющий вызовы e.appendChild, берет отсортированный массив и перемещает элементы в DOM, чтобы они оказались в нужном месте. (Это работает, потому что когда вы вызываете appendChild с элементом, который уже находится в DOM в другом месте, он перемещается; appendChild всегда добавляется в конце.)

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