Выборка максимального значения 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>
|
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 ; |
рони,
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>
|
| Часовой пояс GMT +3, время: 00:05. |