包含的內容稱為處理指令(processinginstruction),它主要給XML解析器一些額外的信息,來告訴解析器如何處理XML數據,例如所有的XML文件開頭都有也可以指定XML文件的樣式表2.DOM節點的類型Document最頂層節點,所有的其它節點都是附屬于它的。Docume" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Javascript DOM

系統 2612 0

(一) 基礎

1.現在的XHTML都是符合XML規范的,XML里面 <??? ?> 包含的內容稱為處理指令(processing instruction),它主要給XML解析器一些額外的信息,來告訴解析

器如何處理XML數據,例如所有的XML文件開頭都有
??? <?xml version="1.0"?>
也可以指定XML文件的樣式表
??? <?xml-stylesheet type="text/css"?>
?2. DOM 節點的類型
?? ? Document 最頂層節點,所有的其它節點都是附屬于它的。
?? ?DocumentType?? ? DTD引用(使用<!DOCTYPE>語法)的對象表示形式,例如: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">.

它不能包含子節點。
?? ?DocumentFragment 可以象Document一樣保存其它節點。
?? ?Element 一對標簽的內容。
?? ?Attr 標簽里面的屬性名稱和屬性值
?? ?Text 標簽之間的文本或者CDataSection里面的文本
?? ?CDataSection <![CDATA[ ]]> 的對象表現形式
?? ?Entity?? ? 表示DTD中的一個實體定義,例如 <!ENTITY foo "foo"> 。這個節點類型不能包含子節點
?? ?EntityReference 代表一個實體引用,例如&quot;。這個節點類型不能包含子節點
?? ?ProcessingInstruction 代表一個處理指令,例如: <?xml-stylesheet type="text/css"?>
?? ?Comment XML注釋,不能包含子節點
?? ?Notation 代表在DTD中定義的記號,很少用。

?3. DOM操作函數
?? ??? ?a. 對屬性的操作, getAttribute(),setAttribute(),removeAttribute() , 或者attributes.getNamedItem(), attributes.setNamedItem(),

attributes.removeNamedItem()
?? ?b. 對子節點的訪問,
?? ??? ? getElementsByTagName() , 可以傳入"*"來獲得所有的節點,但是這個結果和document.all是等價的
?? ??? ? getElementsByName() , IE6和Opera7.5在這個方法上有些錯誤,它們還會返回id等于傳入參數的Element,而且它們只檢查<input/><img/>

元素
?? ??? ? getElementById() id是唯一的,所以返回值最多只有一個Element,IE6對于這個方法有一個bug,如果傳入參數匹配某個元素的name,它也

會返回這個元素
?? ?c. 創建和操作節點
?? ??? ? createAttributge
?? ??? ?createCDATASection
?? ??? ?createComment
?? ??? ?createDocumentFragment
?? ??? ?createElement
?? ??? ?createEntity
?? ??? ?createProcessingInstruction
?? ??? ?createTextNode

?? ?d. 增加節點常用方法: createElement(),createTextNode(),appendChild() ,使用這些方法的時候要注意,有些Element是不可以appendChild的。
?? ?e. 刪除節點常用方法: removeChild(), replaceChild(), insertBefore()
?? ?f. 如果操作的次數比較多,會導致多次刷新,這個時候可以使用 createDocumentFragment() 函數創建document片段,整理好了,一次性的添加到document里面

(二) HTML DOM

a. <img src="mypicture.jpg" border="0"/> ,如果要改屬性可以通過 getAttribute() 或者 setAttribute() ,也可以直接寫為 var nodeImg = document.getElementByID(); nodeImg.src = ""; nodeImg.border = "1";因為class是ECMAScript的關鍵字,所以對于class屬性,我們調用nodeImg.className = "".注意:IE在setAttribute()上有個很大的問題,無法及時刷新。

b. HTML DOM 對table的操作有一套專門的API
?? ??? ?caption ?? ??? ?指向<caption/>元素(如果存在)
?? ??? ?tBodies?? ??? ??? ?指向<tbody/>元素(如果存在)
?? ??? ?tFoot?? ??? ??? ?指向<tfoot/>元素(如果存在)
?? ??? ?tHead?? ??? ??? ?指向<thead/>元素(如果存在)
?? ??? ?rows
?? ??? ?createTHead()
?? ??? ?createTFoot()
?? ??? ?createCaption()
?? ??? ?deleteTHead()
?? ??? ?deleteTFoot()
?? ??? ?deleteCaption()
?? ??? ?deleteRow(position)
?? ??? ?insertRow(position)
?? ??? ?<tbody/>元素添加了以下內容:
?? ??? ??? ?rows
?? ??? ??? ?deleteRow(position)
?? ??? ??? ?insertRow(position)
?? ??? ??? ?<tr/>元素添加了以下內容:
?? ??? ??? ??? ?cells
?? ??? ??? ??? ?deleteCell(position)
?? ??? ??? ??? ?insertCell(position)

c. NodeIterator用來遍歷對象
?? ??? ?
?? ??? ?這個對象的構造函數有四個參數:
?? ??? ?root : ?? ??? ?從樹中開始搜索的那個節點
?? ??? ?whatToShow : ?? ?一個數值代碼,代表一個枚舉,后面詳細介紹
?? ??? ?filter:?? ? 自定義的NodeFilter對象,決定需要忽略哪些節點
?? ??? ?entityReferenceExpansion : bool值,表示是否需要擴展實體引用
?? ??? ?
?? ??? ?通過下面一個或者多個常量的與或操作,可以設置whatToShow的值:
?? ??? ?NodeFilter.SHOW_ALL
?? ??? ?NodeFilter.SHOW_ELEMENT
?? ??? ?NodeFilter.SHOW_ATTRIBUTE
?? ??? ?NodeFilter.SHOW_TEXT
?? ??? ?NodeFilter.SHOW_CDATA_SECTION
?? ??? ?NodeFilter.SHOW_ENTITY_REFERENCE
?? ??? ?NodeFilter.SHOW_ENTITY
?? ??? ?NodeFilter.SHOW_PROCESSING_INSTRUCTION
?? ??? ?NodeFilter.SHOW_COMMENT
?? ??? ?NodeFilter.SHOW_DOCUMENT
?? ??? ?NodeFilter.SHOW_DOCUMENT_TYPE
?? ??? ?NodeFilter.SHOW_DOCUMENT_FRAGMENT
?? ??? ?NodeFilter.SHOW_NOTATION

?? ??? ?方法:

<!---->
????????
// ?不使用自定義NodeFilter參數,可以傳入null
???????? var ?iterator? = ?document.createNodeIterator(document,?NodeFilter.SHOW_ALL,? null ,? false );
????????
var ?node1? = ?iterator.nextNode();??
????????
var ?node2? = ?iterator.nextNode();?
????????
var ?node3? = ?iterator.previousNode();
????????alert(node1?
== ?node3);? // ?output?"true"

????????
// ?擴展NodeFilter對象,該對象只有一個方法acceptNode()
???????? var ?myNodeFilter? =
????????
{
????????????acceptNode?:?
function (oNode)
????????????
{
????????????????
return ?(oNode.tagName? == ? " p " )? ? ?NodeFilter.FILTER_REJECT?:?NodeFilter.FILTER_ACCEPT;
????????????}

????????}

????????或者
????????
var ?myNodeFilter? = ? new ?Object();
????????myNodeFilter.acceptNode?
= ? function (oNode)
????????
{
????????????
return ?(oNode.tagName? == ? " p " )? ? ?NodeFilter.FILTER_REJECT?:?NodeFilter.FILTER_ACCEPT;
????????}

????????
????????
// ?使用自定義NodeFilter對象:?
var ?iterator? = ?document.createNodeIterator(document,?NodeFilter.SHOW_ALL,?myNodeFilter,? false );

????????
// ?如果使用NodeIterator遍歷,如果使用自定義的NodeFilter,忽略掉一個節點,它也就不遍歷該節點的子節點了,
???????? // ?所以子節點也會被忽略,如果不想忽略,就要使用下面的TreeWalker


d. TreeWalker有點像NodeIterator的大哥:它有NodeIterator所有的功能(nextNode()和previousNode()),并且添加了一些遍歷方法:
??? parentNode() ----進入當前節點的父節點
??? firstChild() ----進入當前節點的第一個子節點
??? lastChild() ----進入當前節點的最后一個子節點
??? nextSibling() ----進入當前節點的下一個兄弟節點
??? previousSibling() ----進入當前節點的前一個兄弟節點
??? 可以通過 document.createTreeWalker() 來創建TreeWalker

(三)CSS DOM 編程

1. IE4.0為 每一個Web頁面元素 引入了一個style對象來管理元素的css樣式,最后被DOM沿用至今
2. 改變border line的代碼

var ?oDiv? = ?document.getElementById( " div1 " );
oDiv.style.border?
= ? " 1px?solid?black " ;

3. 通過下面的代碼,可以實現hover的效果

<!----> < div? id ="div1" ?onmouseover ="this.style.backgroundColor='blue'" ?onmouseout ="this.style.backgroundColor='red'" >

4. style對象有一些方法,這些是DOM標準里面有的,但是IE不支持,所以最好還是直接使用style的屬性,如:style.backgroundColor的形式來設置style的property值比較好。
??? style.getPropertyValue(propertyName);
??? style.getPropertyPriority();
??? style.item(index);
??? style.removeProperty(propertyName);
??? style.setProperty(propertyName, value, privority);

5. Copy下面的內容到txt文件,然后改后綴為.htm,用IE打開,可以看到一個黃色的Tip,主要原理是操作style.Visibility屬性,這個屬性和style.display是不一樣的,前者只是控制visible,不會影響布局,后者不僅僅控制visible,還會影響布局。

<!----> <! DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html? xmlns ="http://www.w3.org/1999/xhtml" >
??? < head >
??? ??? < title > Style?Example </ title >
??? ??? < script? type ="text/ecmascript" >
??? ??? ??? function ?showTip(oEvent)
??? ??? ??? {
??? ??? ??????? var ?oDiv? = ?document.getElementById( " divTip1 " );
??? ??? ??????? oDiv.style.visibility?
= ? " visible " ;
??? ??? ??????? oDiv.style.left?
= ?oEvent.clientX? + ? 5 ;
??? ??? ??????? oDiv.style.top?
= ?oEvent.clientY? + ? 5 ;
??? ??? ??? }

??? ??? ??? function ?hideTip(oEvent)
??? ??? ??? {
??? ??? ??? ??? var ?oDiv? = ?document.getElementById( " divTip1 " );
??? ??? ??? ??? oDiv.style.visibility?
= ? " hidden " ;
??? ??? ??? }

??? ??? </ script >
??? </ head >
??? < body >
?? ? ? < p >
??? ?? ? ?? Move?your?mouse?over?the?red?square.
??? ??? </ p >

??? ??? < div
??? ? ??? ? id ="div1"
??? ?? ? ?? style
="background-color:?red;?height:?50px;?width:50px"
??? ? ??? ? onmouseover
="showTip(window.event)" ?onmouseout ="hideTip(window.event)" >
??? ??? </ div >

??? ??? < div
??? ?? ? ?? id ="divTip1"
??? ?? ? ?? style
="background-color:?Yellow;?position:absolute;visibility:hidden;padding:5px" >

??? ? ??? ? < span? style ="font-weight:bold" >
??? ?? ?? ? ??? Custom?Tooltip
??? ? ??? ? </ span >

??? ? ??? ? < br />
??? ??? ? ??? ? More?details?can?go?here.

??? ??? </ div >
??? </ body >
</ html >

6. 下面代碼利用style的display屬性控制折疊功能

<!----> <! DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html? xmlns ="http://www.w3.org/1999/xhtml" >
????
< head >
????????
< title > Toggle?Example </ title >
????????
< script? type ="text/ecmascript" >
????????????
function ?toggle(sDivId)
????????????
{
????????????????
var ?oDiv? = ?document.getElementById(sDivId);
????????????????oDiv.style.display?
= ?(oDiv.style.display? == ? " none " )? ? ? " block " ?:? " none " ;
????????????}

????????
</ script >
????
</ head >
????
< body >
????????
< div
????????????
style ="?background-color:Blue;?color:white;font-weight:bold;padding:10px;cursor:pointer"
????????????onclick
="toggle('divContent1')" >
????????????Click?here.
????????
</ div >
????????
????????
< div
????????????
id ="divContent1" ?
????????????style
="border:3px?solid?blue;?height:100px;?padding:10px" >
????????????This?is?some?content?to?show?and?hide.
????????
</ div >
????????
????????
< p > &nbsp; </ p >
????????
????????
< div
????????????
style ="background-color:Blue;?color:White;?font-weight:bold;?padding:10px;?cursor:pointer"
????????????onclick
="toggle('divContent2')" >
????????????Click?here
????????
</ div >
????????
< div
????????????
id ="divContent2"
????????????style
="border:?3px?solid?blue;?height:10px;?padding:10px" >
????????????This?is?some?content?to?show?and?hide.
????????
</ div >
????
</ body >
</ html >

6. 有些元素通過設置class屬性來設置樣式,我們可以通過 document.styleSheets 集合拿到當前文檔所有的css class。如果修改css class的設置,將影響所有的使用這個css class的元素。
??? DOM中可以使用 document.styleSheets[0]. css Rulers ,但是IE中對應的屬性叫 document.styleSheets[0].rulers
7. 我們可以為一個element設置style,也可以給它的父Element設置style,還可以設置css class,最后我們在瀏覽器看到的效果是所有這些設置的合并,IE提供或者最后看到的style的屬性是 element.currentStyle ,它是只讀的。DOM提供的是一個方法,可以通過 document.defaultView.getComputedStyle( element , hover ) 獲得,第一個參數是元素, 第二個參數是偽類::hover,:first-letter.

(四) 表單(Form)操作

1. 創建表單元素是為了滿足用戶向服務器發送數據的要求,Web表單使用的Html元素有<form/>,<input/>,<select/>,<textarea/>等
2. <form/>用來向服務器傳輸數據,它的屬性有:
??? method?? 表示瀏覽器發送GET請求或是發送POST請求。
??? action?? ?? 表示表單所要提交到的地址URL。
??? enctype?? 當向服務器提交數據時,數據應該使用的編碼方法,默認是application/x-www-url-encoded,不過,如果要上傳文件,可以設置multipart/form-data
??? accept??? 當上傳文件時候,列出服務器能正確處理的mime類型。
??? accept-charset? ? 當提交數據時,列出服務器接受的字符編碼。

3. <input/>元素是Html的主要輸入元素。通過type特性來判斷是哪種輸入控件:
??? “text"
??? "radio"
??? "checkbox"
??? "file"
??? "password"
??? "button"
??? "submit"
??? "reset"
??? "hidden"
??? "image"

4. 獲取Form使用 document.getElementById() 或者 document.forms["formId"], document.forms[0] .

5. 獲取Form上的輸入字段 oForm.elements[0], oForm.elements["textbox1"], oForm.textbox1, oForm["textbox1"]

6. Form 上的方法: form.submit(), form.reset()

7. <input/>有一些屬性:
??? <input type="text" validchars = ”0123456789“/>
??? <input type="text" invalidchars = ”0123456789“/>
??? 控制input可以輸入的字符,除了設置上面的屬性,還要考慮用戶paste,
??? 在IE里面,可以直接<input text="text" onpaste="return false"/>
??? 對于其它的瀏覽器,需要組織菜單paste和Ctrl + V來paste
??? <input type="text" invalidchars="0123456789" onpaste="return false" oncontextmenu="return false"
??? ?? onkeypress="return blcokchars(this, event, true)/>

<!----> function ?blockChars(oTextbox,?oEvent,?bBlockPaste)
{
????
var ?sInvalidChars? = ?oTextbox.getAttribute( " invalidchars " );
????
var ?sChar? = ?String.fromCharCode(oEvent.charCode);
????
var ?bIsValidChar? = ?sInvalidChars.indexOf(sChar)? == ? - 1 ;
????
????
if ?(bBlockPaste)
????
{
????????
return ?bIsValidChar? && ? ! (oEvent.ctrlKey? && ?sChar? == ? " v " );
????}

????
else
????
{
????????
return ?bIsValidChar? || ?oEvent.ctrlKey;
????}

}


8. 對于<select/>,我們使用oListbox.options[0]來獲得選項。

?

Javascript DOM


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 奇米影视欧美 | 91在线免费视频 | 久久97精品久久久久久久看片 | 99亚洲视频 | 亚洲精品久久久久一区二区 | 亚洲成a人v大片在线观看 | √新版天堂资源在线资源 | 亚洲欧美视频 | 国产三级在线视频播放线 | 日韩精品一区二区三区 | 日本免费在线 | 国产欧美曰韩一区二区三区 | 特色特色大片在线 | 欧美日韩视频 | 欧美伦理一区 | 久久精品re| 精品国产福利片在线观看 | 一本一道久久a久久精品蜜桃 | 国产精品一区二区三区四区 | 日本wwww视频 | 久996视频精品免费观看 | 日韩免费视频 | 亚洲福利视频网 | 成年人福利 | 日本欧美不卡一区二区三区在线 | 日本天天色 | 91免费看片 | 国产欧美一区二区成人影院 | 一级毛片免费播放 | 亚洲中午字幕 | 人妻体内射精一区二区三四 | 99热成人在线 | 性欧美xxxx极品摘花 | 日韩精品中文乱码在线观看 | 精品伊人久久大线蕉地址 | 精品久| 亚洲视频一区二区 | 久久久久久久av | 99这里只有精品视频 | 五月天婷婷缴情五月免费观看 | av在线等 |