隣り合うブロック要素の高さを揃えるJavaScript
よーし久々に書いてみるぞー。wktk
divで表を作る時に、中身が可変長な場合、同列内のdivで高さがずれちゃうのを何とかしたい。
例えばこんな感じでdivが並んでるとする。
(divはfloatで横並び)
<div id="rows_1"> <div class="col"> hoge<br>hoge<br>hoge<br>hoge<br>hoge </div> <div class="col"> hoge<br>hoge<br>hoge<br>hoge </div> <div class="col"> hoge<br>hoge<br>hoge </div> <div class="col"> hoge<br>hoge </div> <div class="col"> hoge </div> </div>
左から順に高さが低くなって表が崩れちゃうので、JavaScriptで高さを揃える。
function getElementByClassName(elm, searchClass, tag) { var returnArr = []; tag = tag || '*'; var elms = elm.getElementsByTagName(tag); var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)'); for(var i = 0; i < elms.length; i++) { if(pattern.test(elms[i].className)) { returnArr.push(elms[i]); } } return returnArr; } function getHeight(elm) { return (document.all) ? elm.offsetHeight : elm.clientHeight; } function resetHeight(cols) { var height = getHeight(cols[0]); var len = cols.length; for(var i = 1; i < len; i++) { var h = getHeight(cols[i]); if(h > height) height = h; } for(var i = 0; i < len; i++) { cols[i].style.height = [height, "px"].join(""); } return; } window.onload = function() { var arr = []; for(var i = 1; i < 5; i++) { var row = $id('rows_'+i); if(row) { var cols = getElementsByClassName(row, 'col', 'div'); if(cols.length > 0) { resetHeight(cols); } } else { return false; } } }
とすれば、colクラスをつけた横並びのdivの高さが一番高いdivの高さに揃う。
親divにrows_1、rows_2とかidを振って列を増やしていくと表になります。
っていうのをカレンダー作ろうと思って試してみましたー
for分で5回ループさせているのは1月につき5列必要だったからです。