(一) 基礎
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
代表一個實體引用,例如"。這個節點類型不能包含子節點
??
?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
?? ??? ?方法:




























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的代碼


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

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,還會影響布局。














































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








































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)/>















8. 對于<select/>,我們使用oListbox.options[0]來獲得選項。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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