Изменить размер div от значения в таблице
Здравствуйте!
Есть простая таблица, в ячейках которой есть данные от 0.01 до 1.00.
<table class="ratio-table">
<tr>
<td data-id="1">1</td>
<td data-id="2">0.5</td>
</tr>
</table>
Чуть ниже которой есть несколько блоков, имеющие высоту в % от родителя. <div class="container" style="width: 100%; height: 300px;" > <div class="item" data-id="1" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div> <div class="item" data-id="2" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div> </div> Скажите пожалуйста, как с помощью javascript изменить высоту блоков "item" в зависимости от значения в ячейках таблицы? Например, значение в ячейке изменилось с 1.0 до 0.5 - блок уменьшил свою высоту на 50%. Спасибо! |
document.querySelectorAll('.item').forEach((el, i)=> el.style.height = document.querySelectorAll('.ratio-table td')[i].textContent * 100 +"%");
в тот же обработчик (функцию) которая меняет td |
stasnislav,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script>
window.addEventListener('DOMContentLoaded', function() {
var td = document.querySelectorAll('td[data-id]'), div = document.querySelectorAll('.item');
[].forEach.call(td, function(el,i) {
var height = el.textContent * 100 + "%";
div[i].style.height = height ;
});
});
</script>
</head>
<body>
<table class="ratio-table">
<tr>
<td data-id="1">1</td>
<td data-id="2">0.5</td>
</tr>
</table>
<div class="container" style="width: 100%; height: 300px;" >
<div class="item" data-id="1" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" data-id="2" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
</div>
</body>
</html>
|
рони,
:p |
j0hnik,
:) |
Огромное спасибо!
|
Простите, а как связать конкретную ячейку с конкретным блоком?
У меня четыре столбца таблицы с данными:
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script>
window.addEventListener('DOMContentLoaded', function() {
var td = document.querySelectorAll('td[data-id]'), div = document.querySelectorAll('.item');
[].forEach.call(td, function(el,i) {
var height = el.textContent * 100 + "%";
div[i].style.height = height ;
});
});
</script>
</head>
<body>
<table class="ratio-table">
<tr>
<td>1</td>
<td>0.8</td>
</tr>
<tr>
<td>1</td>
<td>0.6</td>
</tr>
<tr>
<td>1</td>
<td>0.4</td>
</tr>
<tr>
<td>1</td>
<td>0.2</td>
</tr>
</table>
<div class="container" style="width: 100%; height: 300px;" >
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
</div>
</body>
</html>
С предложенным "data-id" атрибутом блоки получают значения из таблицы по порядку. То есть, второй div "item" берёт значения из второй по счёту ячейки, а нужно, чтобы брал из первой ячейки второго столбца, которая по счёту третья. |
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script>
window.addEventListener('DOMContentLoaded', function() {
var td = [...document.querySelectorAll('td[data-id]')].sort((a,b)=>a.dataset.id-b.dataset.id), div = document.querySelectorAll('.item');
[].forEach.call(td, function(el,i) {
var height = el.textContent * 100 + "%";
div[i].style.height = height ;
});
});
</script>
</head>
<body>
<table class="ratio-table">
<tr>
<td data-id='1'>1</td>
<td data-id='0'>0.8</td>
</tr>
<tr>
<td data-id='7'>1</td>
<td data-id='5'>0.6</td>
</tr>
<tr>
<td data-id='2'>1</td>
<td data-id='6'>0.4</td>
</tr>
<tr>
<td data-id='6'>1</td>
<td data-id='4'>0.2</td>
</tr>
</table>
<div class="container" style="width: 100%; height: 300px;" >
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
<div class="item" style="width: 50px; height: 100%; background: orange; display: inline-block;"></div>
</div>
</body>
</html>
data-id -номер блока (отсчет от 0). |
Вы меня спасли! Снимаю шляпу!
|
:-? не осилил ни вопроса, ни ответа
|
| Часовой пояс GMT +3, время: 19:02. |