Просмотр полной версии : Выборка максимального значения 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')
Vlasenko Fedor
07.07.2014, 23:15
<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; под вопросом для таких вычислений -- лучше хранить индекс а не значение
Vlasenko Fedor
08.07.2014, 00:07
рони,
не совсем понял, что ты имеешь ввиду
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 не угодил?
Vlasenko Fedor
08.07.2014, 00:20
Ну постом выше же писали..
да протупил<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>
Poznakomlus,
id условно для примера - тут и про индекс и про почему 20 меньше 4
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<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 > +elements[rez].id) {
rez = len;
}
}
alert(elements[rez].id);
</script>
</body>
</html>
или если не индекс -- то инициализировать значением любого элемента.
типа var rez = elements[0].id ;
Vlasenko Fedor
08.07.2014, 00:40
рони,
cпс дошло, особенно с отрицательными красиво выглядит :)
В ff можно вот так:):<div class="N" id="3"> </div>
<div class="N" id="1"> </div>
<div class="N" id="12"> </div>
<div class="N" id="4"> </div>
<div class="N" id="2"> </div>
<script>
alert(
Array.reduce(
document.querySelectorAll(".N"),
(previous, {id:current}) => Math.max(current, previous),
-Infinity
)
);
</script>
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot