javascript DOM(一)

9925 ワード

DOM:Dockment Object Model(テキストオブジェクトモデル)
D:ドキュメント-)ドキュメントまたはxmlドキュメント
O:オブジェクト---documentオブジェクトの属性と方法
M:モデル
DOMは、xml()に対するツリーベースのAPIです.
DOMツリー:ノードの階層.
DOMは一つの文書をファミリーツリー(父、子、兄弟)と表します.
DOMは、Nodeのインターフェースおよび多くのノードタイプを定義して、XMLノードの複数の態様を表す.
 
1.ノードとそのタイプ:
1)要素ノード
2)属性ノード
3)テキストノード
ノードとそのタイプ
ノード(node):ネットワーク理論に由来し、ネットワークの接続点の一つを表します.ネットワークはノードによって構成される集合である.
<p title=「a gentle reminder」>Don't forget to buy this stuff.


pはelement node.要素ノードです.
title=「a gentle reminder」はatribute node.属性ノードです.
Don't forget to buy this stuff.text node.テキストノードです.
なお、Don't forget to buy this stuffは、ノードpのサブノードである.
 
2.html文書のどこでjsコードを作成しますか?
0)htmlページに直接コードを書きます.
     短所: jsとHtmlは結合性が強すぎて、メンテナンスに不便です.
1)一般的には、bodyノードの前に直接にbody内のノードを取得することはできません.この時点では、ドキュメントツリーのロードが完了していないため、指定されたノードが取得できません.ある方法の内部にある場合を除き、このようにすれば、メソッドを呼び出したときだけ、ノードを取得することができます.このときには、一般的な文書ツリーの読み込みが完了しました.
2)htmlドキュメント全体の最後に、類似コードを略語することができますが、これは習慣に合わないです.
3)一般的に、bodyノードの前でjsコードを作成するが、window.onloadイベントを利用する必要がある.イベントは、現在のドキュメントが完全にロードされた後にトリガされますので、コードはドキュメントの任意のノードに取得できます.
 
<script type=「text/javascript」>
window.onload=function(){
var cityNode=document.getElemenntById(「city」)
alert(cityNode)
)

 
4)onclickなどの属性の割り当てに関する問題:
 
 
スクリプトtype="text/javascript"内部でノードにイベントを追加する方法.いらないです.たとえば:
<script type=「text/javascript」>
var button=document.getElemenntById(「button」)
button.onclick=alert(「ハロー、World」);

ここではブットンにクリックイベントを追加しました.しかし、ページを読み込む時には、AlertウィンドウHello、Worldがあります.また、buttonをクリックしても、何の効果もありません.この原因は、button.onclickが実行しているのはalert(「ハロー、World」)です.しかし、alertは実行結果がない.
次の例:
<script type=「text/javascript」>
function hellowworld(){
alert(Hello,World);
)
var button=document.getElemenntById(「button」)
button.onclick=hellowworld;//ここではハロルドメソッドを実行します.括弧は入れないでください.括弧を入れると、そのままハロルドメソッドを実行するからです.括弧は入れないでください.
var test=hellowworld;//方法の引用
test()///ここでハロルド法体を実行します.

 
                ①. button.onclick=hello World()
不正な割当方法では、上記のコードはハロルド関数の実行をもたらしますが、Oclick属性に付与されるのは関数の実行結果です.
②. button.onclick=hello World;正しい割当方法で、Oclick属性を付与するのは関数の参照です.
 
 
3.どのようにして要素ノードを取得しますか?
1).Dcument.getElemenntById:id属性から対応する単一ノードを取得する
2)document.getElementsByTagName:ラベル名から指定されたノード名の配列を取得し、配列オブジェクトlength属性は配列の長さを取得することができる.
3).Dcument.getElementsByName:ノードのname属性から条件に合うノード配列を取得するが、ieの実現方式はW 3 C標準と異なる.htmlドキュメントにおいて、あるノード(li)にname属性がない場合、ieは使用する. 
   getElements ByNameはノード配列を取得できませんが、フォックスは可能です. 
4)他の2つの方法getElementsByClass Name、getElements ByTagNamens、ieはまったくサポートしていないので、使用を推奨しません. 
コードは以下の通りです
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Untitled Document</title>
		<script type="text/javascript">
			
			window.onload = function(){
				//1.    "  "     li   
				
				//1). 
				var bj = document.getElementById("city");
				//alert(bj);
				
				//2). ie             :         name   , ie       
				bj = document.getElementsByName("BeiJing");
				//alert(bj.length);
				
				var genders = document.getElementsByName("gender");
				//alert(genders.length);
				
				//3). 
				var uls = document.getElementsByTagName("ul");
				alert(uls.length);
			};
						
		</script>
		
	</head>
	<body>
		<p>       ?</p>
		<ul id="city">
			<li id="bj" name="BeiJing">  </li>
			<li>  </li>
			<li>  </li>
			<li>  </li>
		</ul>
		
		<br><br>
		<p>         ?</p>
		<ul id="game">
			<li id="rl">  </li>
			<li>  </li>
			<li>    </li>
			<li>  </li>
		</ul>
		
		<br><br>
		gender: 
			<input type="radio" name="gender" value="male"/>Male
			<input type="radio" name="gender" value="female"/>Female
	</body>
</html>	
 4.属性ノードを取得する:
 
1)プロパティノードの値は、cityNode.idのように直接取得して設定することができます.
2)要素ノードのgetAttributeNode方法で属性ノードを取得し、nodeValueで属性値を読み書きする. 
コード:
 
 
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Untitled Document</title>
		<script type="text/javascript">
			
			window.onload = function(){
				var maleNode = document.getElementsByName("gender")[0];	
		
				//1.         
				alert(maleNode.type);
				
				//2.       ,              value     。
				maleNode.value = "male^^";
				
				
				//3.        ,           (       )
				/*
				var typeNode = maleNode.getAttributeNode("type");
				alert(typeNode.nodeValue);
				typeNode.nodeValue = "text";//       ,      ,firefox  ,  IE   。
				*/
			};
						
		</script>
		
	</head>
	<body>
		<p>       ?</p>
		<ul id="city">
			<li id="bj" name="BeiJing">  </li>
			<li>  </li>
			<li>  </li>
			<li>  </li>
		</ul>
		
		<br><br>
		<p>         ?</p>
		<ul id="game">
			<li id="rl">  </li>
			<li>  </li>
			<li>    </li>
			<li>  </li>
		</ul>
		
		<br><br>
		gender: 
			<input type="radio" name="gender" value="male"/>Male
			<input type="radio" name="gender" value="female"/>Female
	</body>
</html>	
 5.要素ノードのサブノードを取得する(要素ノードのみがサブノードです!!!):(要素ノードすなわち:など、属性ノイド、type、name、valueなど).1)child Nodes属性は、すべのサービスドを取得する。火狐とieの実现方法に违いがある。2)firstChild属性は、第1のサドルドドを取得する。      <html <head> <meta http-equiv=“Content-Type”content=“text/html;charset=UTF-8” <title>Unititled Dcument</title> <script type=「text/javascript」> window.onload=function(){ //1.チアシティノードのすべてのliサブノードを取得する(すべてのサブノードを取得する:フォックスとieの実装方法に違いがある) var cityNode=document.getElemenntById(「city」) var liNodes=cityNode.childNodes; alert(liNodes.length) //2.チアシティノードの第一のサブノードを取得する var first=cityNode.first Child; alert(first) //3.チアシティノードの最後のサブノードを取得する var last=cityNode.lastChild; alert(last) } </script> </head> <body> <p>どの都市が好きですか?p> <ul id=「city」> <li id=“bj”name=“BeiJing”北京</li> <li>上海<li> <li>東京<li> <li>ソウル特別市<li> </ul> <br/><br/> <p>どのゲームが好きですか?p> <ul id=「game」> <li id=「l」紅警<li> <li>実況<li> <リ>極上飛車<リ> <リ>魔獣<リ> </ul> <br/><br/> gender: <input type=“radio”name=“gender”value=“male”Male <input type=「radio」name=「gender」value=「female」/>Female </body> </> 6.ノイドの属性:1).ノデName:現在のノードの名前を表します。読み取り専用属性.*.指定されたたノードがテックスである場合、nodeName属性は内容が「震えtext」です。の文字列に戻ります。2).nodeType:1つの整数を返します。この値は、所与のノードのタイを表にします。読み取り専用属性。1--要素ノード、2--属性ノード、3--テックスノド        3)nodeValue:与えられたノ-ドの現在価値を返します。読み书きの属性①.元素ノード、戻り値はnullです。②.属性ノード:戻り値は此の属性の価値です。③テックスノート:回复の内容です。    <html <head> <meta http-equiv=“Content-Type”content=“text/html;charset=UTF-8” <title>Unititled Dcument</title> <script type=「text/javascript」> window.onload=function(){ //1.要素ノードの属性 var cityNode=document.getElemenntById(「city」) alert(cityNode.nodeName); alert(cityNode.nodeType) //元素ノードのnodeValue属性はnullに戻ります。 alert(cityNode.nodeValue) //2.属性ノードの属性 var id Node=cityNode.get AttributeNode(“id”); alert(idNode.nodeName); alert(idNode.nodeType) alert(idNode.nodeValue) } </script> </head> <body> <p>どの都市が好きですか?p> <ul id=「city」> <li id=“bj”name=“BeiJing”北京</li> <li>上海<li> <li>東京<li> <li>ソウル特別市<li> </ul> <br/><br/> <p>どのゲームが好きですか?p> <ul id=「game」> <li id=「l」紅警<li> <li>実況<li> <リ>極上飛車<リ> <リ>魔獣<リ> </ul> <br/><br/> gender: <input type=“radio”name=“gender”value=“male”Male <input type=「radio」name=「gender」value=「female」/>Female </body> </>  7.テックスノイドを取得する:  1)スティップ:要素ノイド-->要素ノードのサブノイドを取得する2)要素ノードがテキトノのサブノドであり、例え<li id=「bj」name=「Beiing都市」である。p>、先に指定された要素ノードのeleNodeを取得しても良いです。   その后、eleNode.first Child.nodeValueの方法を利用して、そのテックスノートの価値を読む。コード:  <html <head> <meta http-equiv=“Content-Type”content=“text/html;charset=UTF-8” <title>Unititled Dcument</title> <script type=「text/javascript」> window.onload=function(){ //1.㌘bjのテキストノードを取得する var bjNode=document.getElemenntById(「bj」) var bjText Node=bjNode.first Child;はサブノードしかないので、ここではfirst ChildとlastChildを使っても同じです。またはchild Nodes[0] //2.テキストノードの3つの属性を取得する //alert(bjText Node.nodeName); //alert(bjText Node.nodeType) テキストノードの値を/取得する alert(bjText Node.nodeValue) //テキストノードの値を設定する bjText Node.nodeValue=“^^”+bjText Node.nodeValue; } </script> </head> <body> <p>どの都市が好きですか?p> <ul id=「city」> <li id=“bj”name=“BeiJing”北京</li> <li>上海<li> <li>東京<li> <li>ソウル特別市<li> </ul> <br/><br/> <p>どのゲームが好きですか?p> <ul id=「game」> <li id=「l」紅警<li> <li>実況<li> <リ>極上飛車<リ> <リ>魔獣<リ> </ul> <br/><br/> gender: <input type=“radio”name=“gender”value=“male”Male <input type=「radio」name=「gender」value=「female」/>Female </body> </>