Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Выборка максимального значения ID. (https://javascript.ru/forum/misc/48517-vyborka-maksimalnogo-znacheniya-id.html)

Urukhay 07.07.2014 11:01

Выборка максимального значения 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'ов.

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

Цитата:

Сообщение от Aetae
Ну постом выше же писали..

да протупил
<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.