テーブルデータの読み書き †Javascriptでページ内のデータを読み書きする例としてテーブルのデータを読み書きするサンプルです。テーブルの場合ループ処理することが多いのでサンプルにしました。他のデータもサンプルが参考になると思います。 サンプルのTABLEのコードは以下のようになっています。 <DIV><FORM id="fashion" name="fashion"><TABLE id="shohin_table" class="list"><TBODY>
<COL width=100px>
<COL width=100px>
<COL width=100px>
<COL width=100px>
<TR>
<TH>ボタン</TH>
<TH>商品名</TH>
<TH>カラー</TH>
<TH>価格</TH>
</TR>
<TR>
<TD><input class="button blue" type=button value="循環" onclick="roundCols(this);"></TD>
<TD><input type="checkbox" name="clothes" value="100">Tシャツ</TD>
<TD><input type=text name="color" value="レッド" size="4"></TD>
<TD name="price">1000円</TD>
</TR>
<TR>
<TD><input class="button blue" type=button value="Checkbox反転" onclick="flipCheckbox(this);"></TD>
<TD><input type="checkbox" name="clothes" value="200">カーデガン</TD>
<TD><input type=text name="color" value="ブラウン" size="4"></TD>
<TD name="price">2000円</TD>
</TR>
<TR>
<TD><input class="button blue" type=button value="INPUT" onclick="inputOverwrite(this);"></TD>
<TD><input type="checkbox" name="clothes" value="300">ポロシャツ</TD>
<TD><input type=text name="color" value="ブルー" size="4"></TD>
<TD name="price">3000円</TD>
</TR>
<TR>
<TD><input class="button blue" type=button value="INPUT2" onclick="inputOverwrite2(this);"></TD>
<TD><input type="checkbox" name="clothes" value="400">ネルシャツ</TD>
<TD><input type=text name="color" value="ホワイト" size="4"></TD>
<TD name="price">4000円</TD>
</TR>
<TR>
<TD><input class="button blue" type=button value="TEXT" onclick="textOverwrite(this);"></TD>
<TD><input type="checkbox" name="clothes" value="500">パーカー</TD>
<TD><input type=text name="color" value="グリーン" size="4"></TD>
<TD name="price">5000円</TD>
</TR>
</TBODY></TABLE></FORM></DIV>
1.全セルの値の取得 †全セルの値を取得して表示するコードの例です。下のボタンをクリックするとポップアップで表示します。 function showCellsByDOM(){
var work ="";
var shohin_table = document.getElementById("shohin_table");
for ( var i = 1; i < shohin_table.rows.length; i++ ) {
for ( var j = 0; j < 4; j++ ) {
var cellValue = shohin_table.rows[i].cells[j].innerHTML;
work += cellValue + ",";
}
work += String.fromCharCode(13)+String.fromCharCode(10);
}
alert(work);
}
2.INPUTの値の取得(DOM rows,cells) †INPUTの欄の値をDOMにより取得して表示するコードの例です。下のボタンをクリックすると左から3列目のINPUTの値をポップアップで表示します。 function showInputsByDOM(){
var work1 ="color.value:";
var work2 ='getAttribute("value"):';
var shohin_table = document.getElementById("shohin_table");
for ( var i = 1; i < shohin_table.rows.length; i++ ) {
var color = shohin_table.rows[i].cells[2].firstChild;
work1 += "," + color.value;
work2 += "," + color.getAttribute("value");
}
alert(work1 + String.fromCharCode(13)+String.fromCharCode(10) + work2);
}
3.INPUTの値の取得(DOM name) †INPUTの欄の値をnameにより取得して表示するコードの例です。下のボタンをクリックするとポップアップで表示します。 function showInputsByName(){
var work1 ="colors[i].value:";
var work2 ='getAttribute("value"):';
var colors = document.getElementsByName("color");
if ( colors.length == 0 ) {
alert('No data');
return false;
}
for ( var i = 0; i < colors.length; i++ ) {
work1 += "," + colors[i].value;
work2 += "," + colors[i].getAttribute("value");
}
alert(work1 + String.fromCharCode(13)+String.fromCharCode(10) + work2);
}
4.INPUTの値の取得(FormName) †INPUTの欄の値をnameにより取得して表示するコードの例です。下のボタンをクリックするとポップアップで表示します。 function showInputsByFormName(){
var work1 ="colors[i].value:";
var work2 ='getAttribute("value"):';
var colors = document.fashion.color;
if ( colors == null ) {
alert('No data');
return false;
} else if ( isArray(colors) == false ) {
work1 = "colors.value:" + colors.value;
work2 = 'getAttribute("value"):' + colors.getAttribute("value");
} else {
for ( var i = 0; i < colors.length; i++ ) {
work1 += "," + colors[i].value;
work2 += "," + colors[i].getAttribute("value");
}
}
alert(work1 + String.fromCharCode(13)+String.fromCharCode(10) + work2);
}
上記でcolorsがListかどうか以下のisArray()関数を作成してチェックします。 isArray = function (vArg) {
return !(vArg.length === undefined);
}
5.セルの値の取得(DOM name) †INPUTの場合と同様にTDタグのname属性によりDOMのgetElementsByNameを使用してTDオブジェクトを取得してinnerHTML属性の値を表示するコードの例です。但し、getElementsByNameで取得できるのは仕様としてINPUTタグだけでIEの場合TD、DIVなどのタグでは取得できません。
下のボタンをクリックするとIE以外の場合ポップアップで表示します。 function showCellsByName(){
var work ="";
var prices = document.getElementsByName("price");
if ( prices == null ) {
alert("prices == null");
return;
}
for ( var i = 0; i < prices.length; i++ ) {
work +=prices[i].innerHTML + ",";
}
alert(work);
}
6.チェックボックスの値の取得(DOM rows,cells) †INPUTの場合と同様に(チェックボックスもINPUTタグ)DOMにより行オブジェクト、セルオブジェクトからfirstChildメソッドによりチェックボックス( = INPUT)オブジェクトを取得しています。
下のボタンをクリックすると左から2列目のチェックボックスの値をポップアップで表示します。 function showCheckboxByDOM(){
var work1 ="objCell.value:";
var shohin_table = document.getElementById("shohin_table");
for ( var i = 1; i < shohin_table.rows.length; i++ ) {
var objCell = shohin_table.rows[i].cells[1].firstChild;
work1 += "," + objCell.value + "," + objCell.checked;
}
alert(work1);
}
7.チェックボックスの値の取得(DOM name) †INPUTの場合と同様にDOMのgetElementsByNameメソッドによりINPUTのname属性の値が"clothes"のオブジェクトをList( = clothes )に取得します。
この場合「6.チェックボックスの値の取得(DOM rows,cells)」のようにセル内に複数のタグがある場合、セル内で何番目にあるか気にする必要はありません。 function showCheckboxByName(){
var work1 ="clothes[i].value:";
var clothes = document.getElementsByName("clothes");
if ( clothes.length == 0 ) {
alert('No Checkbox');
return false;
}
for ( var i = 0; i < clothes.length; i++ ) {
work1 += "," + clothes[i].value + "," + clothes[i].checked;
}
alert(work1);
}
8.チェックボックスの値の取得(FormName) †INPUTの場合と同様にFORM内のINPUTのname属性の値が"clothes"のINPUTオブジェクトをList( = clothes)に取得し表示しています。 function showCheckboxByFormName(){
var work1 ="clothes[i].value:";
var clothes = document.fashion.clothes;
if ( clothes == null ) {
alert('No Checkbox');
return false;
} else if ( isArray(clothes) == false ) {
work1 = "clothes.value:" + clothes.value + "," + clothes.checked;
} else {
for ( var i = 0; i < clothes.length; i++ ) {
work1 += "," + clothes[i].value + "," + clothes[i].checked;
}
}
alert(work1);
}
以下TABLEに配置されたボタンをクリックし、その行のデータを変更するサンプルです。共通するのはボタンがクリックされた時にJavascript関数に渡すパラメータにthis( = INPUT(ボタン)オブジェクト)を指定して、そのオブジェクトから親のオブジェクトをINPUT -> TD -> TRとたどり行オブジェクトを取得し、その行オブジェクトからTR -> 対象TD -> 対象オブジェクトとたどります。 objTR.cells[1].childNodes[0]; ( = firstChild ) objTR.cells[1].childNodes[1]; objTR.cells[1].childNodes[2]; ( = lastChild ) DOMにより処理しているので、FORMタグは不要です。 9.行のデータの読み書き †1行目の循環ボタンをクリックした時のコードです。 function roundCols(obj){
var objTR = obj.parentNode.parentNode;
var curt = objTR.cells[0].innerHTML;
for ( var i = 1; i < 5; i++ ) {
if ( i == 4 ) {
j = 0;
} else {
j = i;
}
var nxt = objTR.cells[j].innerHTML;
objTR.cells[j].innerHTML = curt;
curt = nxt;
}
}
10.行のチェックボックスの読み書き †2行目のCheckbox反転ボタンをクリックした時のコードです。 function flipCheckbox(obj){
var objTR = obj.parentNode.parentNode;
var number = objTR.rowIndex;
var objTable= objTR.parentNode;
var currentTR = objTable.rows[number];
var checkBox = currentTR.cells[1].firstChild;
checkBox.checked = !checkBox.checked;
}
TABLEまで遡らない以下のようになります。 function flipCheckbox(obj){
var objTR = obj.parentNode.parentNode;
var checkBox = objTR.cells[1].firstChild;
checkBox.checked = !checkBox.checked;
}
11.行のINPUTの読み書き †3行目のINPUTボタンをクリックした時のコードです。 var colorIdx = 0;
function inputOverwrite(obj){
var colors = ["レッド","ブラウン","ブルー","ホワイト","グリーン"];
var objTR = obj.parentNode.parentNode;
var objInput = objTR.cells[2].firstChild;
objInput.value = colors[colorIdx];
colorIdx++;
if ( colorIdx == colors.length ) {
colorIdx =0;
}
}
12.行のINPUTの読み書き(2) †4行目のINPUT2ボタンをクリックした時のコードです。 var colorIdx = 0;
function inputOverwrite2(obj){
var colors = ["レッド","ブラウン","ブルー","ホワイト","グリーン"];
var objTR = obj.parentNode.parentNode;
var objInput = objTR.cells[2].firstChild;
objInput.setAttribute("value",colors[colorIdx]);
colorIdx++;
if ( colorIdx == colors.length ) {
colorIdx =0;
}
}
13.行のTextの読み書き †6行目のTEXTボタンをクリックした時のコードです。 clothIdx = 0;
function textOverwrite(obj){
var clothes = ["Tシャツ","カーデガン","ポロシャツ","ネルシャツ","パーカー"];
var objTR = obj.parentNode.parentNode;
var objText = objTR.cells[1].childNodes[1];
objText.nodeValue = " " + clothes[clothIdx];
clothIdx++;
if ( clothIdx == clothes.length ) {
clothIdx =0;
}
}
Last-modified: 2015-12-02 (水) 23:10:20 (3636d)
|