◆基本
親要素ノードを取得して、createElementで li タグを作成し、その配下にtext Nodeを作成し、書き込むバージョン。
これだと、id で、各要素を指定できる。 (成功版)
<body>
<p>最初のP</p>
<ul id="First"></ul>
<p>2度目のP</p>
<ul id="Second"></ul>
<script type="text/javascript">
//id="First"の操作
/*(1)Pタグの要素ノードオブジェクト*/
var First = document.getElementById('First');
//(2) createElementにより新しくタグ要素作成
var liNode1 = document.createElement('li');
/*(3)新たにテキストノードを作成する*/
var textNode1 = document.createTextNode('こんにちは');
/*(4)作成したテキストノードをliタグ要素の子要素として追加する*/
liNode1.appendChild(textNode1);
/*(5)ulタグに、完成したliタグを追加する*/
First.appendChild(liNode1);
//id="Second"の操作
/*(1)Pタグの要素ノードオブジェクト*/
var Second = document.getElementById('Second');
//(2) createElementにより新しくタグ要素作成
var liNode2 = document.createElement('li');
/*(3)新たにテキストノードを作成する*/
var textNode2 = document.createTextNode('ご無沙汰!');
/*(4)作成したテキストノードをliタグ要素の子要素として追加する*/
liNode2.appendChild(textNode2);
/*(5)ulタグに、完成したliタグを追加する*/
Second.appendChild(liNode2);
</script>
<p>最初のP</p>
<ul id="First"></ul>
<p>2度目のP</p>
<ul id="Second"></ul>
<script type="text/javascript">
//id="First"の操作
/*(1)Pタグの要素ノードオブジェクト*/
var First = document.getElementById('First');
//(2) createElementにより新しくタグ要素作成
var liNode1 = document.createElement('li');
/*(3)新たにテキストノードを作成する*/
var textNode1 = document.createTextNode('こんにちは');
/*(4)作成したテキストノードをliタグ要素の子要素として追加する*/
liNode1.appendChild(textNode1);
/*(5)ulタグに、完成したliタグを追加する*/
First.appendChild(liNode1);
//id="Second"の操作
/*(1)Pタグの要素ノードオブジェクト*/
var Second = document.getElementById('Second');
//(2) createElementにより新しくタグ要素作成
var liNode2 = document.createElement('li');
/*(3)新たにテキストノードを作成する*/
var textNode2 = document.createTextNode('ご無沙汰!');
/*(4)作成したテキストノードをliタグ要素の子要素として追加する*/
liNode2.appendChild(textNode2);
/*(5)ulタグに、完成したliタグを追加する*/
Second.appendChild(liNode2);
</script>
上記を応用して、これがやりたかったこと。
<body>
<p>◆ Array 全体 </p>
<ul id="wholeArray">
</ul>
<p>◆ 配列の値を1つずつ取り出す </p>
<ul id="elementArray">
</ul>
<p> Quiz 配列の値を1つずつ取り出す </p>
<li> 1. <span id="10000"></span> </li>
<li> 2. <span id="9000"></span> </li>
<script type="text/javascript">
var shuffle = [1,2,3,4,5,6,7,8,9,10];
function run(){
document.getElementById("10000").innerHTML = "for文外での配列再表示(1) " + shuffle;
for (var i = shuffle.length-1 ; i >=0 ; i--){
var rand = Math.floor(Math.random()*(i+1));
var temp = shuffle[i];
shuffle[i] = shuffle[rand]; //シャッフル処理
shuffle[rand] = temp;
//wholeArrayへの追加
const wholeArray = document.getElementById("wholeArray");
var liNode1 = document.createElement("li");
var textNode1 = document.createTextNode("カウント変数 i が"+i+"の時" + shuffle);
wholeArray.appendChild(liNode1).appendChild(textNode1);
//ElementArrayへの追加
const elementArray = document.getElementById("elementArray");
var liNode2 = document.createElement("li"); // liも別のノード名でちゃんと作成する。
var textNode2 = document.createTextNode("カウント変数 i が"+ i +"の時の配列要素[i]は " + shuffle[i]);
elementArray.appendChild(liNode2).appendChild(textNode2);
}
document.getElementById("9000").innerHTML = "for文外での配列再表示(2) " + shuffle;
}
run();
</script>
◆解説
createTextNode.html
<p id="info"></p>
<script type="text/javascript">
/*(1)Pタグの要素ノードオブジェクト*/
var info = document.getElementById('info');
/*(2)新たにテキストノードを作成する*/
var textNode = document.createTextNode('こんにちは');
/*(3)作成したテキストノードをPタグ要素の子要素として追加する*/
info.appendChild(textNode); </script>
(1)では、テキストを挿入したいPタグの要素ノードオブジェクトを、変数infoに格納します。
(2)では、createTextNodeメソッドに、挿入したい文字を引数に与え、新たに作成されたテキストノードオブジェクトを変数textNodeに格納します。createTextNodeメソッドはdocumentオブジェクトに定義されているメソッドですので、必ずdocument.createTextNode('文字列')といった具合に使ってください。createTextNodeメソッドでテキストノードを新たに作成しても、すぐにはブラウザ上に反映されません。まだ仮想的に作られたにすぎず、HTML上のどの要素にも関連付けられていないのです。この宙に浮いているテキストノードを、appendChildメソッドで関連付けるわけです。
(3)では、appendChildメソッドに、先ほど作成したテキストノードオブジェクトを引数として与えて、ブラウザ上に表示させています。apendChildメソッドは、要素ノードオブジェクトに定義されたメソッドです。そのため、テキストを挿入したい要素ノードオブジェクトに対してappendChildメソッドを実行することで、その場所にテキストノードが追加されるのです。ここでは、Pタグの要素ノードオブジェクトinfoに対してappendChildメソッドを呼び出していますので、<p id="info">こんにちは</p>という状態ができあがったのです。
◆ 新しいタグを追加しつつテキストを追加する場合
<body> <p id="info"></p> </body>
<script type="text/javascript">
/*(1)Pタグの要素ノードオブジェクト*/
var info = document.getElementById('info');
/*(2)新たにH1タグの要素ノードを作成する*/
var h1Node = document.createElement('h1');
/*(3)新たにテキストノードを作成する*/
var textNode = document.createTextNode('こんにちは');
/*(4)作成したテキストノードをH1タグ要素の子要素として追加する*/
h1Node.appendChild(textNode);
/*(1)Pタグに、完成したH1タグを追加する*/
info.appendChild(h1Node);
</script>
2.項目をリスト表示する。
http://jsstudy.hatenablog.com/entry/javascript-primer-3-10-array
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>3-10_array</title>
</head>
<body>
<h1>やることリスト</h1>
<ul id="list">
</ul>
<script>
var todo = ['デザインカンプ作成', 'データ整理', '勉強会申し込み', '牛乳買う'];
todo.push('歯医者に行く');
for (var i = 0; i < todo.length; i++) {
var li = document.createElement('li');
li.textContent = todo[i];
document.getElementById('list').appendChild(li); //document.writeのように上書きされない。
}
</script>
</body>
</html>
◆応用
上記をつかいならが、2つの要素を記入するスクリプトを書いてみる。
<wholeArray>と<elementArray>の両方に書き込みたいのだが、
片方なら上手く表示されるが、両方一遍にだと、上手くいかない
<body>
<p>◆ Array 全体 </p>
<ul id="wholeArray">
</ul>
<p>◆ 配列の値を1つずつ取り出す </p>
<ul id="elementArray">
</ul>
<script type="text/javascript">
var shuffle = [1,2,3,4,5,6,7,8,9,10];
function run(){
document.getElementById("10000").innerHTML = "for文外での配列再表示(1) " + shuffle;
for (var i = shuffle.length-1 ; i >=0 ; i--){
var rand = Math.floor(Math.random()*(i+1));
var temp = shuffle[i];
shuffle[i] = shuffle[rand]; //シャッフル処理
shuffle[rand] = temp;
var li = document.createElement("li"); //要素ノードの作成
li.textContent = "カウント変数 i が"+i+"の時" + shuffle; //配列全体表示
document.getElementById('wholeArray').appendChild(li);
//li.textContent = "カウント変数 i が"+ i +"の時の配列要素[i]は、" + shuffle[i]; //配列要素表示
//document.getElementById("elementArray").appendChild(li);
/*(1)Pタグの要素ノードオブジェクト*/
var elementArray = document.getElementById('elementArray');
/*(2)新たにテキストノードを作成する*/
var textNode = document.createTextNode("カウント変数 i が"+ i +"の時の配列要素[i]は ver2、" + shuffle[i]);
/*(3)作成したテキストノードをPタグ要素の子要素として追加する*/
// elementArray.appendChild(textNode);
}
}
run();
</script>
<p>◆ Array 全体 </p>
<ul id="wholeArray">
</ul>
<p>◆ 配列の値を1つずつ取り出す </p>
<ul id="elementArray">
</ul>
<script type="text/javascript">
var shuffle = [1,2,3,4,5,6,7,8,9,10];
function run(){
document.getElementById("10000").innerHTML = "for文外での配列再表示(1) " + shuffle;
for (var i = shuffle.length-1 ; i >=0 ; i--){
var rand = Math.floor(Math.random()*(i+1));
var temp = shuffle[i];
shuffle[i] = shuffle[rand]; //シャッフル処理
shuffle[rand] = temp;
var li = document.createElement("li"); //要素ノードの作成
li.textContent = "カウント変数 i が"+i+"の時" + shuffle; //配列全体表示
document.getElementById('wholeArray').appendChild(li);
//li.textContent = "カウント変数 i が"+ i +"の時の配列要素[i]は、" + shuffle[i]; //配列要素表示
//document.getElementById("elementArray").appendChild(li);
/*(1)Pタグの要素ノードオブジェクト*/
var elementArray = document.getElementById('elementArray');
/*(2)新たにテキストノードを作成する*/
var textNode = document.createTextNode("カウント変数 i が"+ i +"の時の配列要素[i]は ver2、" + shuffle[i]);
/*(3)作成したテキストノードをPタグ要素の子要素として追加する*/
// elementArray.appendChild(textNode);
}
}
run();
</script>
参考)
http://jsstudy.hatenablog.com/entry/javascript-primer-3-10-array
0 件のコメント:
コメントを投稿