Как определить максимальное значение style width из нескольких повторяющихся div
Здравствуйте.
Ребята, помогите чайнику. В Javascript я нуль. Нужно определить максимальное значение style width (ширины) из нескольких повторяющихся div с одинаковым классом "pdf". Наваял такое: var count = document.getElementsByClassName('pdf').length; var widths =[]; for (i = 0; i < count; ++i) { widths[i] = document.getElementsByClassName('pdf')[i].style.width.replace('px', ''); } var maxWidth = Math.max.apply(null, widths); Вроде работает. Проверьте, пожалуйста, правильно это или нет. Может как-то лучше можно? |
Цитата:
var o = document.getElementsByClassName('pdf'); var max=0; for (var i = 0; i < o.length; ++i) { var val = o[i].style.width.replace('px', ''); if (val>max) max=val; } alert(max); |
хм
<div class="pdf" style="width: 100px;"></div> <div class="pdf" style="width: 200px;"></div> <div class="pdf" style="width: 300px;"></div> <div class="pdf" style="width: 400px;"></div> <div class="pdf" style="width: 5px;"></div> <script> var o = document.getElementsByClassName('pdf'); var max=0; for (var i = 0; i < o.length; ++i) { var val = o[i].style.width.replace('px', ''); if (val>max) max=val; } alert(max); </script> |
:-?
scrollWidth |
Цитата:
<div class="pdf" style="width: 100px;"></div> <div class="pdf" style="width: 200px;"></div> <div class="pdf" style="width: 300px;"></div> <div class="pdf" style="width: 400px;"></div> <div class="pdf" style="width: 5px;"></div> <script> var o = document.getElementsByClassName('pdf'); var max=0; for (var i = 0; i < o.length; ++i) { var val = o[i].style.width.replace('px', ''); if (-val<-max) max=val; }; alert(max); |
ksa,
:-? <div class="pdf" style="width: 100px;"></div> <div class="pdf" style="width: 200px;"></div> <div class="pdf" style="width: 300px;"></div> <div class="pdf" style="width: 400px;"></div> <div class="pdf" style="width: 5px;"></div> <script> var o = document.getElementsByClassName('pdf'); var max=0; for (var i = 0; i < o.length; ++i) { var val = +o[i].style.width.replace('px', ''); if (val>max) max=val; } alert(max); </script> |
рони, обновленный вариант см.выше. :)
|
:write: :)
<a href="/kv.php"></a> <div class="pdf" style="width: 100px;"></div> <div class="pdf" style="width: 200px;"></div> <div class="pdf" style="width: 300px;"></div> <div class="pdf" style="width: 400px;"></div> <div class="pdf" style="width: 5px;"></div> <script> var o = document.getElementsByClassName('pdf'); var max=[].reduce.call(o,function(a,b) { return Math.max(a, b.scrollWidth) },0); alert(max); </script> |
Цитата:
Цитата:
|
рони, просто хотел развеселить. :)
|
ksa,
:dance: :) |
Спасибо большое!
Только какой вариант выбрать? :( <div class="pdf" style="width: 100px;"></div> <div class="pdf" style="width: 200px;"></div> <div class="pdf" style="width: 300px;"></div> <div class="pdf" style="width: 400px;"></div> <div class="pdf" style="width: 5px;"></div> <script> var o = document.getElementsByClassName('pdf'); var max=0; for (var i = 0; i < o.length; ++i) { var val = +o[i].style.width.replace('px', ''); if (val>max) max=val; } alert(max); </script> Или <div class="pdf" style="width: 100px;"></div> <div class="pdf" style="width: 200px;"></div> <div class="pdf" style="width: 300px;"></div> <div class="pdf" style="width: 400px;"></div> <div class="pdf" style="width: 5px;"></div> <script> var o = document.getElementsByClassName('pdf'); var max=[].reduce.call(o,function(a,b) { return Math.max(a, b.scrollWidth) },0); alert(max); </script> Наверно там, где буковок меньше? :victory: |
cartgen,
самый оптимальный скорее всего будет этот <div class="pdf" style="width: 100px;"></div> <div class="pdf" style="width: 200px;"></div> <div class="pdf" style="width: 300px;"></div> <div class="pdf" style="width: 400px;"></div> <div class="pdf" style="width: 5px;"></div> <script> var o = document.getElementsByClassName('pdf'); var max=0; for (var i = 0; i < o.length; ++i) { var val = o[i].scrollWidth; if (val>max) max=val; } alert(max); </script> |
Цитата:
|
laimas,
а можно код? |
Типа такого:
var max = i = n = 0, a = document.getElementsByClassName("pdf"), b = [].slice.call(a, Math.floor(a.length/2)); for(; i < b.length; i++) (n = Math.max(a[i].scrollWidth, b[i].scrollWidth)) > max && (max = n); |
laimas,
спасибо |
А можно просто обходить массив с двух сторон в цикле с итерацией Math.round(array.length/2). Но массивы хранятся в памяти в последовательных ячейках, а значит последовательный обход самый быстрый. В тоже время и ссылка на память с постоянным смешением -1 тоже по идее быстро будет.
В общем фиг его знает, надо тестировать. :) |
Цитата:
<div class="pdf" style="width: 100px;"></div> <div class="pdf" style="width: 200px;"></div> <div class="pdf" style="width: 300px;"></div> <div class="pdf" style="width: 400px;"></div> <div class="pdf" style="width: 5px;"></div> <script> const max = Math.max(...Array.from(document.querySelectorAll('.pdf'), el => el.scrollWidth)); alert(max); </script> |
Часовой пояс GMT +3, время: 10:59. |