2015-07-17 5 views
0

Я был просто поиск простого Jquery сортировочного сценария и нашел в Интернете:Понимания простого сценария сортировки, который сравнивает значения

$(function() { 
    $('ol').each(function() { 
     var matches = $('li', this).filter(function() { // Each item 
      var text = $(this).text(); 
      return $('ul.three li').filter(function() { // Are there matches in .three? 
       return $(this).text() == text; 
      }).length > 0; 
     }).length; 
     $('li:last', this).text((matches * 10) + ' Points'); 
    }); 
}); 

FIDDLE HERE

Обратите внимание, как значения первых 2 таблиц по сравнению с значениями третьей таблицы. теперь мой вопрос о том, как увеличивается matches, я просмотрел весь скрипт, но не совсем понимаю, как совпадение получает значение 4 и 2 для первой и второй таблицы соответственно (отображается в соответствующей таблице как 40 и 20) , Я понимаю использование функции filter, но не совсем понимаю, как матчи получают ее значение, я знаю, что свойство length связано с этим, я вижу его в конце оператора return, но все еще не совсем понимаю, как совпадают увеличиваться?

+0

'filter' возвращает элементы, соответствовал фильтру, в основном, а затем 'length' возвращает размер массива items. Что именно вы не понимаете? –

+0

@ PabloMatíasGomez, как d oes матч заселяются с 4 в первый раз? , если вы можете ответить на этот вопрос, вы ответили на мой вопрос. –

+1

Ii выполняет итерацию каждого 'li' в этом' ol' и сравнивает каждый из них, чтобы увидеть, есть ли его текст в любом из 'li' в' .three'. И, как вы можете видеть, их четыре. Таким образом, фильтр возвращает четыре элемента 'li' в массиве (не reaaly массива, а« массив jQuery »), а затем' length' равно 4. –

ответ

2
$(function() { 
    $('ol').each(function() { 
     var matches = $('li', this).filter(function() { // Each item 

Здесь будет перебирать каждый li элемент, Ins, содержащийся внутри ol элемента, который в настоящее время повторного

  var text = $(this).text(); 
      return $('ul.three li').filter(function() { // Are there matches in .three? 
       return $(this).text() == text; 
      }).length > 0; 

Здесь он будет искать в ul с классом three если есть li который имеет тот же текст, что и номер li, который повторяется. Функция filter вернет каждый элемент, соответствующий поиску, конечно, если все тексты разные, он вернет один элемент или ни один. Поэтому, когда он проверяет его length > 0, он проверяет наличие хотя бы одного элемента, который соответствует (aka: если этот текст был в .three.Таким образом, если он возвращает true, он будет откорректировать предыдущий фильтр.

 }).length; 

Здесь, так же, как и раньше, но с наружным фильтром, чтобы проверить, сколько, где обнаружено. Таким образом, для первого, значение равно 4.

 $('li:last', this).text((matches * 10) + ' Points'); 
    }); 
}); 
+0

Удалил мой ответ после прочтения вашего. –

+0

@Pablo Спасибо! пойдет, хотя ур ответ! –

+1

@ АлександрСолоник Добро пожаловать :) –

Смежные вопросы