JavaScriptにおけるDOM操作 XML読み込み Ajax(動的HTML編集) 情報システム工学科 ラシキアゼミ 3年 H107072 田中直樹 目次 XMLデータの読み込み DOM操作による動的HTML編集方法 要素を生成し、階段構造の要素を作成する 階段構造の要素から、データを取り出す、 HTML部にデータを組み込む 今回の目標 DOM操作の関数を用いて、XML・HTML要 素の取り出しを行えるようになる 階層構造の要素を作成できるようになる XMLファイルの読み込み・データの取り出し が出来るようになる 動的Webページの実現(ページの自由な書き 換え)が出来るようになる 前回内容の軽い復習 XML・・・まずはタグ構造によるファイルを作成 JavaScript・・・ • 基本的な概念(変数、データ型、基本処理構造)、 • DOM操作のために、オブジェクトに属性を付与 • オブジェクトの属性を辿って、オブジェクトのデータ を取得(DOM操作入門) 登場した操作 var dom = document.myForm.text1.value ; ① var dom = document.myForm.sel1.selectedIndex ; ② var str1 = document.myForm.sel1. options[選択されている配列アドレス].value XMLファイルを読み込む XMLファイルを読み込む操作 ・・・この操作は扱うブラウザ(エンジン)によって 操作(呼び出すオブジェクト)が違うことが多い。 ライブラリを用いれば、それも解消できるが、 いきなりライブラリを使っても仕組みが理解で きないので、今回はFireFoxに対応した方法を 用いる。 XMLファイル読み込み手順 読み込み用オブジェクトの生成 var xhttp = new XMLHttpRequest() XMLHttpRequest() ・・・Mozilla 系ブラウザで用いるオブジェクト。このオブ ジェクトの機能を使って、XMLファイルを読み込む。 XMLファイル読み込み手順 通信方法の設定 xhttp.open(“GET”,“1st_kadai1.xml”, false); openメソッド 引数は、http通信でどの命令を行うか(POST or GET)、通信を行うファイル名、同期通信か非同期通信 かの指定 XMLファイル読み込み手順 http送信のリクエストを出し、ファイルを読み込む xhttp.send(null) ; sendメソッド サーバに HTTP リクエストを送信する。送信先の URL、 送信方式(GET や POST など)は、open メソッドで指 定したものになる。 データを送信しない時でも必要で、その場合、引数 がnullになる。(今回はこれ) XMLファイル読み込み手順 XMLデータを取り出す var xmldoc = xhttp.responseXML ; 通信が成功すれば、 通信を行ったオブジェク トのresponseXMLプロパティから、取得した XMLデータを受け取ることができる。 XMLファイル読み込み手順 XMLノード(要素)を取り出す var node = xmldoc.getElementsByTagName(“タグ名 ") ; getElementsByTagNameメソッドで、取得 したいデータが格納されたタグを指定し、デー タを取得する。 DOM操作 要素の取り出し方 var dom = objects.getElementsByTagName(node) 引数(node):要素を取得したいオブジェクトのタグ名 機能:対象のオブジェクト群の中から、引数で指定したタグ 名で定義されたデータをすべて取得する。戻り値を格納 した変数は自動的に配列になる。 基本的に、XMLのデータを格納する際に用いられる。つ まり、親要素objectsはXMLのタグを格納した変数とな る。 XMLファイル読み込み手順 XMLノード(要素)を取り出す var memberNum = nodes[i].childNodes[0].nodeValue nodes[i]・・・getElementsByTagNameで取り 出したデータ(配列) nodes[i]以下は、構造上このようにアクセスする。 nodeValueは格納されたデータを指す。 DOM Document Object Model 文書オブジェクトモデルともいう。 Webページの内容(文章、画像、音声など)及びそれら の配置、スタイルをオブジェクトとして扱い、それらをス クリプト言語を使って制御するための取り決め。 また、その制御をおこなうためのAPI(Application programming Interface)。 タグ構造であるXMLにもこの概念は適用可能 DOM ボタンにアクセス テキストフォーム にアクセス 参照:http://www.scollabo.com/banban/java/jvp_01.html DOM操作 DOM操作には次のものがある • 階層構造の要素を作成し、その要素にアクセスする • もともとあるHTML要素を階段状の構造と捉え、 その要素にアクセスする DOM操作 関数(要素作成) 階層構造の要素を作成し、その要素にアクセ スを行う ・・・実現するためには、階段状の要素を生成す る関数を知る必要がある DOM操作 関数(要素作成) document.createElement(tagName) 引数:作成するタグ名 (タグ名なので、tdタグなど、タグ名で作成 した要素の役割が決まる) 機能:要素を新しく作成する。作成する要素の 種類は、引数のタグ名で設定する DOM操作 関数(要素作成) document.createTextNode(tagName) 引数:作成するテキスト名 (タグの中身のデータ) 機能:文字列要素を生成する。生成した要素を 既存のタグ要素に追加すると、タグの中身の 文字列になる <td>ラシキアゼミ<td> DOM操作 関数(要素作成) element.appendChild(element) 引数:追加する要素(要素を格納した変数でもOK) 親要素:子要素を追加する要素 機能:要素からアクセスして関数を呼び出す。対象 の要素を呼び出し元の要素の子要素として追 加する。 JavaScriptで生成した要素をHTMLに書き 込む手段として用いる事が出来る DOM操作 関数(要素作成) element.setAttribute("src", "xxx.gif"); 引数:1つ目・・・設定する属性名 2つ目・・・設定する属性値 機能:対象の要素に属性と属性値を設定する。 DOM操作 要素の作り方 画像要素を作成(+変数に格納) var node = document.createElement(“img”) ↓ 生成されたタグ img(画像)要素 <img> 変数の格納したほうが扱いやすいので、癖をつけて 下さい。 DOM操作 要素の作り方 画像要素を作成 node.setAttribute(“src”,”owata.jpg”) ; ↓ 生成されたタグ <img src=“owata.jpg”> img(画像)要素 owata.jpg DOM操作 要素の取り出し方 var dom = objects.getElementById(node) 引数(node):要素を取得したいオブジェクトのid属性値 機能:対象のオブジェクト群の中から、引数で指定したid を持つノード(要素)を取得する。親要素objects はファイルの種類によって変わる HTML:document XML:xmlのタグを格納した変数 これにより、階層構造の要素をたどらずに、オブ ジェクトの取得が可能になる DOM操作 要素の取り出し方 var dom = objects.getElementsByTagName(node) 引数(node):要素を取得したいオブジェクトのタグ名 機能:対象のオブジェクト群の中から、引数で指定したタグ 名で定義されたデータをすべて取得する。戻り値を格納 した変数は自動的に配列になる。 基本的に、XMLのデータを格納する際に用いられる。つ まり、親要素objectsはXMLのタグを格納した変数とな る。 HTML動的書き換えの関数 node.innerHTML(data) 引数:挿入する要素(ノード) node:内容を書き換える要素 機能:DOM操作で取得した要素nodeの中身を、引数の 要素に書き換える。簡単にいえば、1つのタグの中 身のデータをそのまま入れ替える関数である。 DOMを用いたHTMLの編集 例えば以下のように… <form id=“myForm” name=“myForm”> <input type=“text” id=“txt1” name=“txt1”> </input> </form> テキストフォームを生成 DOMを用いたHTMLの編集 データを取り出す var dom1 = document.myForm.txt1.value ・・・DOM構造のHTML部を辿ってデータを取得 var dom1 = document.getElementById(“txt1”).value ・・・documentオブジェクト以下は、id名を指定すれば 一括でデータを取得したい要素を指定できる DOMを用いたHTMLの編集 ボタンにアクセス テキストフォーム にアクセス このように、たどってアクセスしていたものを・・・ DOMを用いたHTMLの編集 子オブジェクトに直接アクセスできるようになった。手間が省ける 動的書き換えに便利なタグ <div>タグ ・・・divタグはタグ自体は効果を持たず、タグで囲んだ 範囲のデータをひとまとまりの要素として扱うことが 出来るタグ。例えば、データがない範囲をdivタグで 囲み、属性をつけて・・・ <div id=“node1” name=“node1”></div> これをinnerHTML関数の親要素に指定するだけで JavaScriptで操作した要素の挿入先を作ることが 出来る DOM操作 HTMLへの組み込み これまでの技術を組み合わせる… 変数 node (画像タグが格納されている) ↓ 格納内容 img(画像)要素 owata.jpg <img src=“owata.jpg”> DOM操作 HTMLへの組み込み これまでの技術を組み合わせる… ↓ 生成されたタグ divタグを作成し… <div id=“div1” name=“div1”></div> var node2 = document.getElementById(“div1”); ・・・作成したdivタグをDOM操作で変数に格納 DOM操作 HTMLへの組み込み node2.appendChild(node) ; // 画像タグをdivタグの子要素として追加 ↓ 生成されたタグ img(画像)要素 owata.jpg <div id=“div1” name=“div1”> <img src=“owata.jpg”> </div> JavaScript内で生成した要素を、HTML内に組 み込むことが出来る。 課題1 前回のレクチャーの課題1で作成したXML ファイルを読み込み、要素を出力する ※出力するのは格納したデータのみでOK。 ただし、出力時に、どのゼミのデータか分 かるようにすること。 (例えば、格納されたデータの間に JavaScriptで文字列を追加するなど…) 課題2 <tr>タグ、<td>タグ、を生成して、動的に表を追 加するプログラムを作る サンプル 課題2 補足 作成手順 1、あらかじめHTML部分に<table>タグのみ を定義(idかname属性は設定するように) 2、<tr>タグを作成し、変数に格納 3、列数分の<td>タグを作成し、それぞれ変 数に格納 課題2 補足 4、列にデータを記載したい(文字列、オブジェ クト)場合、その要素を作成する 5、4の要素を作成した場合、それを3(<td> タグ)の子要素として追加する 課題2 補足 6、5の要素も含め、すべてのtdタグを2(<tr> タグ)の子要素として追加する 7、<tr>タグをあらかじめ定義したtableタグ の子要素に追加する 課題3(仮) 動的なHTML要素の編集 文章キーワード変換プログラム 文章の色々なキーワードを動的に変化させる プログラム。 サンプル 課題4 これまでの技術(HTMLオブジェクトの取り出 し&編集、XML読み込み、DOM操作、)を用 いて、動的なHTMLプログラムを作成しよう 評価ポイント HTMLオブジェクトの取り出し、DOM操作 は最低限入れる XMLファイルを反映させたらさらに加点 機能性のあるプログラム、コメント
© Copyright 2024 ExpyDoc