Вход

Просмотр полной версии : Выборка максимального значения ID.


Urukhay
07.07.2014, 11:01
Как можно узнать максимальное значение 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'ов.

Erolast
07.07.2014, 11:14
<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>

Sweet
07.07.2014, 11:44
Можно сделать гораздо "дешевле", за один проход:

<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>

рони
07.07.2014, 21:28
Sweet,
на всякий случай
+current.id > +revious.id
и Erolast, тоже можно над этим подумать.

Aetae
07.07.2014, 22:29
рони, ага:)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

рони
07.07.2014, 23:53
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

Aetae
08.07.2014, 00:16
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>

рони
08.07.2014, 00:25
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>

рони
08.07.2014, 00:33
или если не индекс -- то инициализировать значением любого элемента.
типа var rez = elements[0].id ;

Vlasenko Fedor
08.07.2014, 00:40
рони,
cпс дошло, особенно с отрицательными красиво выглядит :)

Aetae
08.07.2014, 00:43
В 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>