#javascript #jquery #css
#javascript #jquery #css
Вопрос:
Я создаю функцию для своей системы сетки, чтобы проверить size
, больше ли элементов в row
их width
s, тогда 100%
она скрывает строку.
Вот как выглядит мой HTML:
<div class="row">
<div class="column size-1"><p>column-size-1</p></div>
<div class="column size-1"><p>column-size-1</p></div>
<div class="column size-1"><p>column-size-1</p></div>
<div class="column size-1"><p>column-size-1</p></div>
<div class="column size-1"><p>column-size-1</p></div>
<div class="column size-1"><p>column-size-1</p></div>
<div class="column size-1"><p>column-size-1</p></div>
<div class="column size-1"><p>column-size-1</p></div>
<div class="column size-1"><p>column-size-1</p></div>
<div class="column size-1"><p>column-size-1</p></div>
<div class="column size-1"><p>column-size-1</p></div>
<div class="column size-1"><p>column-size-1</p></div>
</div>
<div class="row">
<div class="column size-2"><p>column-size-2</p></div>
<div class="column size-2"><p>column-size-2</p></div>
<div class="column size-2"><p>column-size-2</p></div>
<div class="column size-2"><p>column-size-2</p></div>
<div class="column size-2"><p>column-size-2</p></div>
<div class="column size-2"><p>column-size-2</p></div>
</div>
В 1 строке может поместиться 12 столбцов. Итак size-1
, класс находится 1 / 12
в процентах.
У меня есть этот фрагмент кода, и я уже добился получения каждой ширины каждого size
элемента в одном row
. Но только по отдельности…
Я хочу, чтобы он получал каждую ширину каждого size
элемента, который он может найти в каждой строке, и суммировал их.
Вот как выглядит моя функция в настоящее время.
function check() {
var size = '.row [class*="size-"]',
_size = $(size);
$(_size).each(function () {
var widths = $(this).width(),
inProcent = (widths) / $(this).parent().width() * 100;
console.log(inProcent);
});
}
Требуемый результат:
100%
100%
Фактический результат:
8.333333%
8.333333%
8.333333%
8.333333%
8.333333%
8.333333%
8.333333%
8.333333%
8.333333%
8.333333%
8.333333%
8.333333%
16.666667%
16.666667%
16.666667%
16.666667%
16.666667%
16.666667%
Комментарии:
1. Я рекомендую запускать
each
дважды; один раз для каждой строки. Объявите переменную внеeach
и увеличьте ее внутриeach
Ответ №1:
Вы регистрируете размер для каждого элемента отдельно, вам все равно нужно суммировать их вместе. Также вы захотите сделать это отдельно для каждой строки.
function check() {
var rows = $('.row');
rows.each(function(i, e) { //here "this" is the row
var columns = $(e).find('[class*="size-"]');
var sum;
columns.each(function (i, el) { //here "this" becomes the column.
//If you want to access the row, you need the "e" variable!
var width = $(el).width(),
inProcent = width / $(el).parent().width() * 100;
sum = inProcent;
});
console.log(sum);
}
}
Комментарии:
1. Да, хорошо, но как мне это сделать тогда?: C
2. Спасибо, это сработало: D но каковы эти
i, e
аргументы из функций? : S3. @Dreiba они обозначают
index
иelement
, как передано jQuery . Index — это индекс в коллекции, element — это сам элемент и совпадает сeach
. Вы снова оборачиваете его в объект jQuery, делая$(e)
так, чтобы функции jQuery были доступны для него. Кстати, не забудьте проголосовать, если мой ответ был полезен 😉4. @Dreiba Заменить
width()
наouterWidth(true)
. Смотрите: api.jquery.com/outerwidth5. @Dreiba это связано с тем, что значения с плавающей запятой не являются точными на 100% в языках программирования из-за двоичной природы компьютеров. Чем больше вычислений с плавающей запятой, тем больше отклонений вы получите. Однако лучше всего округлять конечный результат. Но не думайте, что это повышает вашу точность. Если вам нужны более точные числа с плавающей запятой, доступны другие решения. На данный момент вы можете использовать
Math.round(sum)
.