Выборка максимального значения ID.
Как можно узнать максимальное значение id среди класса "N"?
То есть среди этого: <div class="N" id="1"> </div> <div class="N" id="2"> </div> <div class="N" id="3"> </div> <div class="N" id="4"> </div> <div class="N" id=N...> </div> ... Нужно скриптово узнать тот div, у которого максимальный id. При условии, что мы не знаем сколько всего этих div'ов. |
<html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <script> $(document).ready(function() { var div_ids = []; $("div.N").each(function() { div_ids.push(this.id); //Перебираем все дивы и заносим в массив их идентификаторы }); alert(div_ids.sort().pop()); //Сортируем массив по возрастанию и берем последний элемент }); </script> </head> <body> <div class="N" id="3"> </div> <div class="N" id="1"> </div> <div class="N" id="4"> </div> <div class="N" id="2"> </div> </body> </html> |
Можно сделать гораздо "дешевле", за один проход:
<div class="N" id="3"> </div> <div class="N" id="1"> </div> <div class="N" id="4"> </div> <div class="N" id="2"> </div> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <script> var $elements = $(".N"); var element = Array.prototype.reduce.call($elements, function (revious, current) { return current.id > revious.id ? current : revious; }); alert( element.id ); </script> |
Sweet,
на всякий случай +current.id > +revious.id и Erolast, тоже можно над этим подумать. |
рони, ага:)
alert('12' > '2') |
<body> <div class="N" id="3"></div> <div class="N" id="1"></div> <div class="N" id="4"></div> <div class="N" id="2"></div> <script> var elements = document.querySelectorAll('div.N'); var len = elements.length; for (var rez = 0; len--;) { if (elements[len].id > rez) { rez = elements[len].id; } } alert(rez); </script> </body> >Будет работать быстрее и в IE8 |
Poznakomlus,
не будет работать как и коды выше и правильность rez = 0 rez = elements[len].id; под вопросом для таких вычислений -- лучше хранить индекс а не значение |
рони,
не совсем понял, что ты имеешь ввиду rez = 0 - инициализировал переменную rez = elements[len].id; - намекаешь, что может не будет id у элемента, так в примере у всех есть лучше хранить индекс а не значение - эт вообще не понял, индекс чего, и где xранить задача в получении максимального значения здесь используем сравнение строки с числом http://javascript.ru/comparison-operators |
Poznakomlus,
<body> <div class="N" id="3"></div> <div class="N" id="11"></div> <div class="N" id="4"></div> <div class="N" id="2"></div> <script> var elements = document.querySelectorAll('div.N'); var len = elements.length; for (var rez = 0; len--;) { if (elements[len].id > rez) { rez = elements[len].id; } } alert(rez); </script> </body>Ну постом выше же писали... Sweet, накой jquery? Чем те querySelector не угодил? |
Цитата:
<div class="N" id="3"></div> <div class="N" id="1"></div> <div class="N" id="4"></div> <div class="N" id="2"></div> <b>Будет работать быстрее и в IE8</b> <script> var elements = document.querySelectorAll('div.N'); var len = elements.length; for (var rez = 0; len--;) { if (elements[len].id > rez) { rez = +elements[len].id; console.log(typeof rez); } } alert(rez); </script> |
Часовой пояс GMT +3, время: 23:04. |