JavascriptでTABLEのcell属性を変更する:メモ
純粋に備忘録、メモです。
// セルサイズ指定 table.rows[r].cells[c].style.width = String(size)+"px"; // pxを忘れないこと // 中央寄せ table.rows[r].cells[c].style.textAlign = "center"; table.rows[r].cells[c].style.marginLeft = "auto"; table.rows[r].cells[c].style.marginRight = "auto"; // 右寄せ table.rows[r].cells[c].style.textAlign = "right"; table.rows[r].cells[c].style.marginLeft = "auto"; table.rows[r].cells[c].style.marginRight = "0px";
JavascriptでTABLEのcellを中央寄せ、右寄せ、サイズ変更する
下のサンプルは、指定カラムのサイズを100または10に変え、
指定行の指定カラムを左寄せ、中央寄せ、右寄せします。
サイズ指定でpxを付け忘れないように注意が必要です。cellがINPUTなどの子持ち
の場合は子供のサイズも変更する必要があります。残念ながら子持ちcellを
指定通りのサイズにすることにはまだ成功していません。
cssのmargin-leftはmarginLeftになります。
| 大型 | → | 小型 |
|---|---|---|
| ワシ | → | スズメ |
| ペンギン | → | ツバメあややややや |
| ツル | → | チドリ |
| ハト | → |
row: column:
<style type="text/css">
table.t1{border:1px solid black ; border-collapse:collapse}
table.t1 td{border:1px solid black}
table.t1 th{border:1px solid black}
</style>
<script type="text/javascript">
function $E(id){return document.getElementById(id);}
function changeWidth(table,column,size){
var rows= table.rows;
for(var ridx=0;ridx<rows.length;++ridx){
if( column >= rows[ridx].cells.length ) continue;
var cell= rows[ridx].cells[column];
cell.style.width= String(size)+"px"; // この"px"を付け忘れる
if( cell.firstChild != null ){ // cell内にINPUTなどを持つ場合
cell.firstChild.style.width="98%"; // 本当は、タグとtypeを見て個別対処
// var tagName = row.cells[idx2].firstChild.tagName;
// var sub_type = row.cells[idx2].firstChild.getAttribute("type");
}
}
}
function center(table,row,column){
var rows= table.rows;
if( row >= rows.length ) return;
if( column >= rows[row].cells.length ) return;
var cell= rows[row].cells[column];
cell.style.textAlign = "center";
cell.style.marginLeft = "auto";
cell.style.marginRight = "auto";
}
function right(table,row,column){
var rows= table.rows;
if( row >= rows.length ) return;
if( column >= rows[row].cells.length ) return;
var cell= rows[row].cells[column];
cell.style.textAlign = "right";
cell.style.marginLeft = "auto";
cell.style.marginRight = "0px";
}
function left(table,row,column){
var rows= table.rows;
if( row >= rows.length ) return;
if( column >= rows[row].cells.length ) return;
var cell= rows[row].cells[column];
cell.style.textAlign = "left";
cell.style.marginLeft = "0px";
cell.style.marginRight = "auto";
}
</script>
<table class="t1" id="table1">
<tr style="background:#000044;color:#FFFFFF">
<th>大型</th><th width="60">→</th>
<th>小型</th>
</tr>
<tr> <td>ワシ</td> <td>→</td> <td>スズメ</td> </tr>
<tr> <td>ペンギン</td> <td>→</td> <td>ツバメ</td> </tr>
<tr> <td>ツル</td> <td>→</td> <td>チドリ</td> </tr>
<tr> <td>ハト</td> <td>→</td> <td>メジロ</td> </tr>
</table><br>
row:<input type="text" value="1" style="width:2em" id="r" />
column:<input type="text" value="1" style="width:2em" id="c" /><br>
<input type="button" value="changeWidth(c,100)"
onClick="changeWidth($E('table1'),$E('c').value,100);"/>
<input type="button" value="changeWidth(c,10)"
onClick="changeWidth($E('table1'),$E('c').value,10);"/><br>
<input type="button" value="left(r,c)"
onClick="left($E('table1'),$E('r').value,$E('c').value);"/>
<input type="button" value="center(r,c)"
onClick="center($E('table1'),$E('r').value,$E('c').value);"/>
<input type="button" value="right(r,c)"
onClick="right($E('table1'),$E('r').value,$E('c').value);"/>
JavascriptでTABLEのcellサイズを変え、中身のサイズもそれに合わせる
TABLEのサイズは基本的にセルサイズに中身を合わせるのではなく 中身のサイズにセルサイズを合わせる仕様となっています。
IEの場合はtable-layout:fixedとすることで、内部の要素によってセル サイズが変わらないようにできます。
cell内の子要素に対して、再帰的にサイズを指定する例を示します。
<td>の中に単純な文字と<span>に入れた文字、および
<INPUT type="text">を入れてあります。
white-space:nowarpは各要素に与えています。当然<td>にも
与えているのですが有効とはならず、<span>に入れたもの
に対し<span>に指定することにより有効になるようです。
cellと同じサイズを指定すると表示がくずれますので、ここでは幅、
高さとも2ピクセル小さくしています。
テーブル全体の横幅も指定しています。
理由は不明ですが、table-layoutをスタティックにcssで指定すると デザインが崩れましたので、ここではサイズ変更時に指定しています。
| 大型 | → | 小型 |
|---|---|---|
| ワシ | → | スズメ |
| ペンギン | → | ツバメあややややや |
| ペンギン | → | チドリ |
| ツル | → |
<style type="text/css">
table.t2{border:1px solid black ; border-collapse:collapse;}
table.t2 td{border:1px solid black}
table.t2 th{border:1px solid black}
</style>
<script type="text/javascript">
function $E(id){return document.getElementById(id);}
function setObjSize(obj,width,height){
if( obj.style != undefined ){
obj.style.whiteSpace="nowrap";
obj.style.width = String(width)+"px";
obj.style.height= String(height)+"px";
}
if( obj.firstChild!=null ) setObjSize(obj.firstChild,width-2,height-2);
}
function setCellSizes(table,column,width,height){
var rows= table.rows;
for(var ridx=0;ridx<rows.length;++ridx){
if( column >= rows[ridx].cells.length ) continue;
setObjSize(rows[ridx].cells[column],width,height);
}
}
function setTableSize(table,columnsWidth,height){
table.style.tableLayout="fixed";
var total_size=0;
for(var idx=0;idx<columnsWidth.length;++idx) total_size += columnsWidth[idx];
table.style.width= String(total_size)+"px";
for(var idx=0;idx<columnsWidth.length;++idx) {
setCellSizes(table,idx,columnsWidth[idx],height);
}
}
</script>
<table class="t2" id="table2">
<tr style="background:#000044;color:#FFFFFF">
<th>大型</th><th width="60">→</th>
<th>小型</th>
</tr>
<tr> <td>ワシ</td> <td>→</td> <td><span class=x>スズメ</span></td> </tr>
<tr> <td><span>ペンギン</span></td><td>→</td> <td><span class=x>ツバメあややややや</span></td> </tr>
<tr> <td>ペンギン</td> <td>→</td> <td><span class=x>チドリ</span></td> </tr>
<tr> <td>ツル</td> <td>→</td> <td><input type="text" value="メジロ"></input></td> </tr>
</table><br>
<input type="button" value="([50,30,150],25)"
onClick="setTableSize($E('table2'),[50,30,150],25);"/>
<input type="button" value="[100,150,50],50)"
onClick="setTableSize($E('table2'),[100,150,50],22);"/>
<input type="button" value="([80,120,200],35)"
onClick="setTableSize($E('table2'),[80,120,200],30);"/>
<input type="button" value="([10,20,30],10)"
onClick="setTableSize($E('table2'),[10,20,30],10);"/>
| 固定リンク

