国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

javascript高級程序設計(第三版)學習摘錄下

yiliang / 733人閱讀

摘要:方法接受一個布爾值參數,表示是否執行深復制方法不會復制添加到節點中的屬性,例如事件處理程序等。由于跨域安全限制,來自不同子域的頁面無法通過通信。這三個集合都是動態的換句話說,每當文檔結構發生變化時,它們都會得到更新。

第十章 DOM

1001、每一段標記都可以通過樹中的一個節點來表示:HTML 元素通過元素節點表示,特性(attribute)通過特性節點表示,文檔類型通過文檔類型節點表示,而注釋則通過注釋節點表示。總共有 12 種節點類型,這些類型都繼承自一個基類型

1002、JavaScript 中的所有節點類型都繼承自 Node 類型,因此所有節點類型都共享著相同的基本屬性和方法

1003、所有節點都有的最后一個屬性是 ownerDocument ,該屬性指向表示整個文檔的文檔節點。這種關系表示的是任何節點都屬于它所在的文檔,任何節點都不能同時存在于兩個或更多個文檔中。通過這個屬性,我們可以不必在節點層次中通過層層回溯到達頂端,而是可以直接訪問文檔節點

1004、如果需要把節點放在 childNodes 列表中某個特定的位置上,而不是放在末尾,那么可以使用insertBefore() 方法。這個方法接受兩個參數:要插入的節點和作為參照的節點。插入節點后,被插入的節點會變成參照節點的前一個同胞節點( previousSibling ),同時被方法返回。如果參照節點是null ,則 insertBefore() 與 appendChild() 執行相同的操作

1005、 replaceChild() 方法接受的兩個參數是:要插入的節點和要替換的節點。要替換的節點將由這個方法返回并從文檔樹中被移除,同時由要插入的節點占據其位置

1006、如果只想移除而非替換節點,可以使用 removeChild() 方法。這個方法接受一個參數,即要移除的節點。被移除的節點將成為方法的返回值

1007、要使用這幾個方法必須先取得父節點(使用 parentNode 屬性)。另外,并不是所有類型的節點都有子節點,如果在不支持子節點的節點上調用了這些方法,將會導致錯誤發生

1008、 cloneNode() ,用于創建調用這個方法的節點的一個完全相同的副本。 cloneNode() 方法接受一個布爾值參數,表示是否執行深復制

1009、cloneNode() 方法不會復制添加到 DOM 節點中的 JavaScript 屬性,例如事件處理程序等。這個方法只復制特性、(在明確指定的情況下也復制)子節點,其他一切都不會復制。IE 在此存在一個 bug,即它會復制事件處理程序,所以我們建議在復制之前最好先移除事件處理程序

1010、最后一個方法是 normalize() ,這個方法唯一的作用就是處理文檔樹中的文本節點。由于解析器的實現或 DOM 操作等原因,可能會出現文本節點不包含文本,或者接連出現兩個文本節點的情況。當在某個節點上調用這個方法時,就會在該節點的后代節點中查找上述兩種情況。如果找到了空文本節點,則刪除它;如果找到相鄰的文本節點,則將它們合并為一個文本節點

1011、雖然 DOM 標準規定 Document 節點的子節點可以是 DocumentType 、 Element 、 ProcessingIn-struction 或 Comment ,但還有兩個內置的訪問其子節點的快捷方式。第一個就是 documentElement屬性,該屬性始終指向 HTML 頁面中的 元素。另一個就是通過 childNodes 列表訪問文檔元素,但通過 documentElement 屬性則能更快捷、更直接地訪問該元素

1012、所有瀏覽器都支持 document.documentElement 和 document.body 屬性

1013、作為 HTMLDocument 的一個實例, document 對象還有一些標準的 Document 對象所沒有的屬性。這些屬性提供了 document 對象所表現的網頁的一些信息。其中第一個屬性就是 title ,包含著 元素中的文本——顯示在瀏覽器窗口的標題欄或標簽頁上。通過這個屬性可以取得當前頁面的標題,也可以修改當前頁面的標題并反映在瀏覽器的標題欄中。修改 title 屬性的值不會改變 <title>元素</p> <p>1014、 URL 屬性中包含頁面完整的 URL(即地址欄中顯示的 URL), domain 屬性中只包含頁面的域名,而 referrer屬性中則保存著鏈接到當前頁面的那個頁面的 URL。在沒有來源頁面的情況下, referrer 屬性中可能會包含空字符串。所有這些信息都存在于請求的 HTTP 頭部,只不過是通過這些屬性讓我們能夠在JavaScrip 中訪問它們而已</p> <p>1015、當頁面中包含來自其他子域的框架或內嵌框架時,能夠設置 document.domain 就非常方便了。由于 跨 域 安 全 限 制 , 來 自 不 同 子 域 的 頁 面 無 法 通 過 JavaScript 通 信 。 而 通 過 將 每 個 頁 面 的document.domain 設置為相同的值,這些頁面就可以互相訪問對方包含的 JavaScript 對象了</p> <p>1016、假設有一個頁面加載自 www.wrox.com,其中包含一個內嵌框架,框架內的頁面加載自 p2p.wrox.com。由于 document.domain 字符串不一樣,內外兩個頁面之間無法相互訪問對方的 JavaScript 對象。但如果將這兩個頁面的 document.domain 值都設置為 "wrox.com" ,它們之間就可以通信了。瀏覽器對 domain 屬性還有一個限制,即如果域名一開始是“松散的”(loose),那么不能將它再設置為“緊繃的”(tight)。換句話說,在將 document.domain 設置為 "wrox.com" 之后,就不能再將其設置回 "p2p.wrox.com" ,否則將會導致錯誤</p> <p>1017、HTMLCollection 對象還有一個方法,叫做 namedItem() ,使用這個方法可以通過元素的 name特性取得集合中的項。對 HTMLCollection 而言,我們可以向方括號中傳入數值或字符串形式的索引值。在后臺,對數值索引就會調用 item() ,而對字符串索引就會調用 namedItem()</p> <p>1018、有一個 document 對象的功能已經存在很多年了,那就是將輸出流寫入到網頁中的能力。這個能力體現在下列 4 個方法中: write() 、 writeln() 、 open() 和 close() 。其中, write() 和 writeln()方法都接受一個字符串參數,即要寫入到輸出流中的文本。 write() 會原樣寫入,而 writeln() 則會在字符串的末尾添加一個換行符( n )。在頁面被加載的過程中,可以使用這兩個方法向頁面中動態地加入內容</p> <p>1019、方法 open() 和 close() 分別用于打開和關閉網頁的輸出流</p> <p>1020、每個元素都有一或多個特性,這些特性的用途是給出相應元素或其內容的附加信息。操作特性的DOM 方法主要有三個,分別是 getAttribute() 、 setAttribute() 和 removeAttribute()</p> <p>1021、與 getAttribute() 對應的方法是 setAttribute() ,這個方法接受兩個參數:要設置的特性名和值。如果特性已經存在, setAttribute() 會以指定的值替換現有的值;如果特性不存在, setAttribute()則創建該屬性并設置相應的值</p> <p>1022、 removeAttribute() ,這個方法用于徹底刪除元素的特性。調用這個方法不僅會清除特性的值,而且也會從元素中完全刪除特性</p> <p>1023、使用 document.createElement() 方法可以創建新元素。這個方法只接受一個參數,即要創建元素的標簽名。這個標簽名在 HTML 文檔中不區分大小寫,而在 XML(包括 XHTML)文檔中,則是區分大小寫的</p> <p>1024、文本節點由 Text 類型表示,包含的是可以照字面解釋的純文本內容。純文本中可以包含轉義后的HTML 字符,但不能包含 HTML 代碼</p> <p>1025、可以使用 document.createTextNode() 創建新文本節點,這個方法接受一個參數——要插入節點中的文本</p> <p>1026、使用 document.createComment() 并為其傳遞注釋文本也可以創建注釋節點</p> <p>1027、雖然不能把文檔片段直接添加到文檔中,但可以將它作為一個“倉庫”來使用,即可以在里面保存將來可能會添加到文檔中的節點。要創建文檔片段,可以使用 document.createDocumentFragment() 方法</p> <p>1028、文檔片段繼承了 Node 的所有方法,通常用于執行那些針對文檔的 DOM操作。如果將文檔中的節點添加到文檔片段中,就會從文檔樹中移除該節點,也不會從瀏覽器中再看到該節點。添加到文檔片段中的新節點同樣也不屬于文檔樹。可以通過 appendChild() 或insertBefore() 將文檔片段中內容添加到文檔中。在將文檔片段作為參數傳遞給這兩個方法時,實際上只會將文檔片段的所有子節點添加到相應位置上;文檔片段本身永遠不會成為文檔樹的一部分</p> <p>1029、Attr 對象有 3 個屬性: name 、 value 和 specified 。其中, name 是特性名稱(與 nodeName 的值相同), value 是特性的值(與 nodeValue 的值相同),而 specified 是一個布爾值,用以區別特性是在代碼中指定的,還是默認的</p> <p>1030、理解 NodeList 及其“近親” NamedNodeMap 和 HTMLCollection ,是從整體上透徹理解 DOM 的關鍵所在。這三個集合都是“動態的”;換句話說,每當文檔結構發生變化時,它們都會得到更新。因此,它們始終都會保存著最新、最準確的信息。從本質上說,所有 NodeList 對象都是在訪問 DOM文檔時實時運行的查詢</p> <p>1031、一般來說,應該盡量減少訪問 NodeList 的次數。因為每次訪問 NodeList ,都會運行一次基于文檔的查詢。所以,可以考慮將從 NodeList 中取得的值緩存起來</p> <p>1032、querySelector() 方法接收一個 CSS 選擇符,返回與該模式匹配的第一個元素,如果沒有找到匹配的元素,返回 null 。</p> <p>1033、querySelectorAll() 方法接收的參數與 querySelector() 方法一樣,都是一個 CSS 選擇符,但返回的是所有匹配的元素而不僅僅是一個元素。這個方法返回的是一個 NodeList 的實例</p> <p>1034、如果傳入了瀏覽器不支持的選擇符或者選擇符中有語法錯誤,querySelectorAll() 會拋出錯誤</p> <p>1035、Selectors API Level 2 規范為 Element 類型新增了一個方法 matchesSelector() 。這個方法接收一個參數,即 CSS 選擇符,如果調用元素與該選擇符匹配,返回 true ;否則,返回 false</p> <p>1036、對于元素間的空格,IE9及之前版本不會返回文本節點,而其他所有瀏覽器都會返回文本節點</p> <p>1037、支持 getElementsByClassName() 方法的瀏覽器有 IE 9+、Firefox 3+、Safari 3.1+、Chrome 和Opera 9.5+</p> <p>1038、新增了 document.hasFocus() 方法,這個方法用于確定文檔是否獲得了焦點</p> <p>1039、使用 document.readyState 的最恰當方式,就是通過它來實現一個指示文檔已經加載完成的指示器。支持 readyState 屬性的瀏覽器有 IE4+、Firefox 3.6+、Safari、Chrome和 Opera 9+</p> <p>1040、自從 IE6 開始區分渲染頁面的模式是標準的還是混雜的,檢測頁面的兼容模式就成為瀏覽器的必要功能。IE 為此給 document 添加了一個名為 compatMode 的屬性,這個屬性就是為了告訴開發人員瀏覽器采用了哪種渲染模式。就像下面例子中所展示的那樣,在標準模式下, document.compatMode 的值等于 "CSS1Compat" ,而在混雜模式下, document.compatMode 的值等于 "BackCompat"。</p> <p>1041、HTML5規定可以為元素添加非標準的屬性,但要添加前綴 data- ,目的是為元素提供與渲染無關的信息,或者提供語義信息。這些屬性可以任意添加、隨便命名,只要以 data- 開頭即可</p> <p>1042、在讀模式下, innerHTML 屬性返回與調用元素的所有子節點(包括元素、注釋和文本節點)對應的 HTML 標記。在寫模式下, innerHTML 會根據指定的值創建新的 DOM樹,然后用這個 DOM 樹完全替換調用元素原先的所有子節點</p> <p>1043、在寫模式下, innerHTML 的值會被解析為 DOM 子樹,替換調用元素原來的所有子節點。因為它的值被認為是 HTML,所以其中的所有標簽都會按照瀏覽器處理 HTML 的標準方式轉換為元素(同樣,這里的轉換結果也因瀏覽器而異)。如果設置的值僅是文本而沒有 HTML 標簽,那么結果就是設置純文本</p> <p>1044、 innerHTML 字符串一開始(而且整個)就是一個“無作用域的元素”,所以這個字符串會變成空字符串</p> <p>1045、不支持 innerHTML 的元素有:<b> <col> 、 <colgroup> 、<frameset> 、 <head> 、 <html> 、 <style> 、 <table> 、<tbody> 、<thead> 、<tfoot> 和 <tr></b> 。此外,在 IE8 及更早版本中, <title> 元素也沒有 innerHTML 屬性</p> <p>1046、在讀模式下, outerHTML 返回調用它的元素及所有子節點的 HTML 標簽。在寫模式下, outerHTML會根據指定的 HTML 字符串創建新的 DOM子樹,然后用這個 DOM 子樹完全替換調用元素。</p> <p>1047、由于 IE9 之前的版本與其他瀏覽器在處理文本節點中的空白符時有差異,因此就出現了 children屬性。這個屬性是 HTMLCollection 的實例,只包含元素中同樣還是元素的子節點。除此之外,children 屬性與 childNodes 沒有什么區別,即在元素只包含元素子節點時,這兩個屬性的值相同</p> <p>1048、在實際開發中,經常需要知道某個節點是不是另一個節點的后代。調用 contains() 方法的應該是祖先節點,也就是搜索開始的節點,這個方法接收一個參數,即要檢測的后代節點。如果被檢測的節點是后代節點,該方法返回 true ;否則,返回 false 。</p> <p>1049、innerText 與 textContent 返回的內容并不完全一樣。比如,innerText 會忽略行內的樣式和腳本,而 textContent 則會像返回其他文本一樣返回行內的樣式和腳本代碼。避免跨瀏覽器兼容問題的最佳途徑,就是從不包含行內樣式或行內腳本的 DOM 子樹副本或 DOM 片段中讀取文本</p> <p>1050、scrollIntoViewIfNeeded(alignCenter) :只在當前元素在視口中不可見的情況下,才滾動瀏覽器窗口或容器元素,最終讓它可見。如果當前元素在視口中可見,這個方法什么也不做。如果將可選的 alignCenter 參數設置為 true ,則表示盡量將元素顯示在視口中部(垂直方向)。Safari 和 Chrome 實現了這個方法</p> <p>1051、在標準模式下,所有度量值都必須指定一個度量單位。在混雜模式下,可以將style.width 設置為 "20" ,瀏覽器會假設它是 "20px" ;但在標準模式下,將style.width 設置為 "20" 會導致被忽略——因為沒有度量單位。在實踐中,最好始終都指定度量單位</p> <p>1052、通過 cssText 屬性可以訪問style特性中的CSS代碼。在讀取模式下, cssText 返回瀏覽器對 style特性中 CSS 代碼的內部表示。在寫入模式下,賦給 cssText 的值會重寫整個 style 特性的值;也就是說,以前通過 style 特性指定的樣式信息都將丟失</p> <p>1053、如果你需要更多信息,可以使用 getPropertyCSSValue() 方法,它返回一個包含兩個屬性的 CSSValue 對象,這兩個屬性分別是: cssText 和 cssValueType 。其中, cssText 屬性的值與 getPropertyValue() 返回的值相同,而 cssValueType 屬性則是一個數值常量,表示值的類型:0 表示繼承的值,1 表示基本的值,2 表示值列表,3 表示自定義的值</p> <p>1054、要從元素的樣式中移除某個 CSS 屬性,需要使用 removeProperty() 方法。使用這個方法移除一個屬性,意味著將會為該屬性應用默認的樣式(從其他樣式表經層疊而來)。例如,要移除通過 style特性設置的 border 屬性</p> <p>1055、 getComputedStyle() 方法返回一個 CSSStyleDeclaration 對象(與 style 屬性的類型相同),其中包含當前元素的所有計算的樣式。IE 不支持 getComputedStyle() 方法,但它有一種類似的概念。在 IE 中,每個具有 style 屬性的元素還有一個 currentStyle 屬性。這個屬性是 CSSStyleDeclaration 的實例,包含當前元素全部計算后的樣式</p> <p>1056、無論在哪個瀏覽器中,最重要的一條是要記住所有計算的樣式都是只讀的;不能修改計算后樣式對象中的 CSS 屬性。此外,計算后的樣式也包含屬于瀏覽器內部樣式表的樣式信息,因此任何具有默認值的 CSS 屬性都會表現在計算后的樣式中。例如,所有瀏覽器中的 visibility 屬性都有一個默認值,但這個值會因實現而異</p> <p>1057、CSSStyleSheet 類型表示的是樣式表,包括通過 <b><link></b> 元素包含的樣式表和在 <b><style></b> 元素中定義的樣式表</p> <p>1058、從樣式表中刪除規則的方法是 deleteRule() ,這個方法接受一個參數:要刪除的規則的位置</p> <p>1059、首先要介紹的屬性涉及偏移量(offset dimension),包括元素在屏幕上占用的所有可見的空間。元素的可見大小由其高度、寬度決定,包括所有內邊距、滾動條和邊框大小(注意,不包括外邊距)</p> <p>1060、所有這些偏移量屬性都是只讀的,而且每次訪問它們都需要重新計算。因此,應該盡量避免重復訪問這些屬性;如果需要重復使用其中某些屬性的值,可以將它們保存在局部變量中,以提高性能。</p> <b>第十一章 DOM擴展、第十二章 DOM2和DOM3</b> <p>1101、querySelector() 方法接收一個 CSS 選擇符,返回與該模式匹配的第一個元素,如果沒有找到匹配的元素,返回 null</p> <p>1102、querySelectorAll() 方法接收的參數與 querySelector() 方法一樣,都是一個 CSS 選擇符,但返回的是所有匹配的元素而不僅僅是一個元素。這個方法返回的是一個 NodeList 的實例。返回的值實際上是帶有所有屬性和方法的 NodeList ,而其底層實現則類似于一組元素的快照,而非不斷對文檔進行搜索的動態查詢</p> <p>1103、childElementCount :返回子元素(不包括文本節點和注釋)的個數;firstElementChild :指向第一個子元素; firstChild 的元素版;lastElementChild :指向最后一個子元素; lastChild 的元素版; previousElementSibling :指向前一個同輩元素; previousSibling 的元素版;nextElementSibling :指向后一個同輩元素; nextSibling 的元素版</p> <p>1104、getElementsByClassName() 方法接收一個參數,即一個包含一或多個類名的字符串,返回帶有指定類的所有元素的 NodeList。傳入多個類名時,類名的先后順序不重要。因為返回的對象是 NodeList ,所以使用這個方法與使用 getElementsByTagName()。以及其他返回 NodeList 的 DOM 方法都具有同樣的性能問題。支持 getElementsByClassName() 方法的瀏覽器有 IE 9+、Firefox 3+、Safari 3.1+、Chrome 和Opera 9.5+</p> <p>1105、div.classList.remove("user") => add(value) :將給定的字符串值添加到列表中。如果值已經存在,就不添加了;contains(value) :表示列表中是否存在給定的值,如果存在則返回 true ,否則返回 false;remove(value) :從列表中刪除給定的字符串;toggle(value) :如果列表中已經存在給定的值,刪除它;如果列表中沒有給定的值,添加它。支持 classList 屬性的瀏覽器有 Firefox 3.6+和 Chrome</p> <p>1106、 document.activeElement 屬性,這個屬性始終會引用 DOM 中當前獲得了焦點的元素。默認情況下,文檔剛剛加載完成時, document.activeElement 中保存的是 document.body 元素的引用。文檔加載期間, document.activeElement 的值為 null</p> <p>1107、 document.hasFocus() 方法,這個方法用于確定文檔是否獲得了焦點。</p> <p>1108、實現了這兩個屬性的瀏覽器的包括 IE 4+、Firefox 3+、Safari 4+、Chrome 和 Opera 8+</p> <p>1109、使用 document.readyState 的最恰當方式,就是通過它來實現一個指示文檔已經加載完成的指示器</p> <p>1110、在標準模式下, document.compatMode 的值等于 "CSS1Compat" ,而在混雜模式下, document.compatMode 的值等于 "BackCompat"</p> <p>1111、HTML5 新增了 document.head 屬性,引用文檔的 <head> 元素。實現 document.head 屬性的瀏覽器包括 Chrome 和 Safari 5</p> <p>1112、HTML5規定可以為元素添加非標準的屬性,但要添加前綴 data- ,目的是為元素提供與渲染無關的信息,或者提供語義信息。這些屬性可以任意添加、隨便命名,只要以 data- 開頭即可</p> <p>1113、添加了自定義屬性之后,可以通過元素的 dataset 屬性來訪問自定義屬性的值。 dataset 屬性的值是 DOMStringMap 的一個實例,也就是一個名值對兒的映射。在這個映射中,每個 data-name 形式的屬性都會有一個對應的屬性,只不過屬性名沒有 data- 前綴(比如,自定義屬性是 data-myname ,那映射中對應的屬性就是 myname )</p> <p>1114、在讀模式下, innerHTML 屬性返回與調用元素的所有子節點(包括元素、注釋和文本節點)對應的 HTML 標記。在寫模式下, innerHTML 會根據指定的值創建新的 DOM樹,然后用這個 DOM 樹完全替換調用元素原先的所有子節點</p> <p>1115、使用 innerHTML 屬性也有一些限制。比如,在大多數瀏覽器中,通過 innerHTML 插入 <b><script></b>元素并不會執行其中的腳本。IE8 及更早版本是唯一能在這種情況下執行腳本的瀏覽器,但必須滿足一些條件。一是必須為 <b><script></b> 元素指定 defer 屬性,二是 <b><script></b> 元素必須位于(微軟所謂的)“有作用域的元素”(scoped element)之后。 <b><script></b> 元素被認為是“無作用域的元素”(NoScope element),也就是在頁面中看不到的元素,與 <b><style></b> 元素或注釋類似。如果通過 innerHTML 插入的字符串開頭就是一個“無作用域的元素”,那么 IE 會在解析這個字符串前先刪除該元素。<b>div.innerHTML = "<input type="hidden"><script defer>alert("hi");</script>"</b> </p> <p>1116、并不是所有元素都支持 innerHTML 屬性。不支持 innerHTML 的元素有: <b><col> 、 <colgroup> 、<frameset> 、 <head> 、 <html> 、 <style> 、 <table> 、 <tbody> 、 <thead> 、 <tfoot> 和 <tr></b> 。此外,在 IE8 及更早版本中, <title> 元素也沒有 innerHTML 屬性</p> <p>1117、IE8 為此提供了 window.toStaticHTML() 方法,這個方法接收一個參數,即一個 HTML 字符串;返回一個經過無害處理后的版本——從源 HTML 中刪除所有腳本節點和事件處理程序屬性</p> <p>1118、如果在<div>元素上調用outerHTML,會返回與上面相同的代碼,包括<div>本身。支持outerHTML屬性的瀏覽器有IE4+、Safari 4+、Chrome和Opera 8+。Firefox 7及之前版本都不支持outerHTML屬性</p> <p>1119、插入標記的最后一個新增方式是 insertAdjacentHTML() 方法。這個方法最早也是在IE中出現的,它接收兩個參數:插入位置和要插入的 HTML 文本。"beforebegin" ,在當前元素之前插入一個緊鄰的同輩元素;"afterbegin" ,在當前元素之下插入一個新的子元素或在第一個子元素之前再插入新的子元素;"beforeend" ,在當前元素之下插入一個新的子元素或在最后一個子元素之后再插入新的子元素;"afterend" ,在當前元素之后插入一個緊鄰的同輩元素。第二個參數是一個 HTML 字符串(與 innerHTML 和 outerHTML的值相同)。支持insertAdjacentHTML() 方法的瀏覽器有 IE、Firefox 8+、Safari、Opera 和 Chrome</p> <p>1120、scrollIntoView() 可以在所有 HTML 元素上調用,通過滾動瀏覽器窗口或某個容器元素,調用元素就可以出現在視口中。如果給這個方法傳入 true 作為參數,或者不傳入任何參數,那么窗口滾動之后會讓調用元素的頂部與視口頂部盡可能平齊。如果傳入 false 作為參數,調用元素會盡可能全部出現在視口中,(可能的話,調用元素的底部會與視口頂部平齊)。支持 scrollIntoView() 方法的瀏覽器有 IE、Firefox、Safari 和 Opera</p> <p>1121、children這個屬性是 HTMLCollection 的實例,只包含元素中同樣還是元素的子節點。除此之外,children 屬性與 childNodes 沒有什么區別,即在元素只包含元素子節點時,這兩個屬性的值相同。支持 children 屬性的瀏覽器有 IE5、Firefox 3.5、Safari 2(但有 bug)、Safari 3(完全支持)、Opera8和 Chrome(所有版本)。IE8 及更早版本的 children 屬性中也會包含注釋節點,但 IE9 之后的版本則只返回元素節點</p> <p>1122、調用 contains() 方法的應該是祖先節點,也就是搜索開始的節點,這個方法接收一個參數,即要檢測的后代節點。如果被檢測的節點是后代節點,該方法返回 true ;否則,返回 false。支持 contains() 方法的瀏覽器有 IE、Firefox 9+、Safari、Opera 和 Chrome</p> <p>1123、多數情況下,都可以通過簡單地轉換屬性名的格式來實現轉換。其中一個不能直接轉換的 CSS 屬性就是 float 。由于 float 是 JavaScript 中的保留字,因此不能用作屬性名。“DOM2 級樣式”規范規定樣式對象上相應的屬性名應該是 cssFloat ;Firefox、Safari、Opera 和 Chrome 都支持這個屬性,而 IE支持的則是 styleFloat</p> <p>1124、通過 cssText 屬性可以訪問style特性中的CSS代碼。在讀取模式下, cssText 返回瀏覽器對 style特性中 CSS 代碼的內部表示。在寫入模式下,賦給 cssText 的值會重寫整個 style 特性的值;也就是說,以前通過 style 特性指定的樣式信息都將丟失</p> <p>1125、getPropertyValue() 方法取得的始終都是 CSS 屬性值的字符串表示。如果你需要更多信息,可以使用 getPropertyCSSValue() 方法,它返回一個包含兩個屬性的 CSSValue 對象,這兩個屬性分別是: cssText 和 cssValueType 。其中, cssText 屬性的值與getPropertyValue() 返回的值相同,而 cssValueType 屬性則是一個數值常量,表示值的類型:0 表示繼承的值,1 表示基本的值,2 表示值列表,3 表示自定義的值。在實際開發中, getPropertyCSSValue() 使用得比 getPropertyValue() 少得多。IE9+、Safarie3+以及 Chrome 支持這個方法。Firefox 7 及之前版本也提供這個訪問,但調用總返回 null</p> <p>1126、要從元素的樣式中移除某個 CSS 屬性,需要使用 removeProperty() 方法。使用這個方法移除一個屬性,意味著將會為該屬性應用默認的樣式(從其他樣式表經層疊而來)</p> <p>1127、getComputedStyle() 方法。這個方法接受兩個參數:要取得計算樣式的元素和一個偽元素字符串(例如 ":after" )。如果不需要偽元素信息,第二個參數可以是 null 。 getComputedStyle() 方法返回一個 CSSStyleDeclaration 對象(與 style 屬性的類型相同),其中包含當前元素的所有計算的樣式。IE 不支持 getComputedStyle() 方法,但它有一種類似的概念。在 IE 中,每個具有 style 屬性的元素還有一個 currentStyle 屬性。這個屬性是 CSSStyleDeclaration 的實例,包含當前元素全部計算后的樣式。與 DOM 版本的方式一樣,IE 也沒有返回 border 樣式,因為這是一個綜合屬性。無論在哪個瀏覽器中,最重要的一條是要記住所有計算的樣式都是只讀的;不能修改計算后樣式對象中的 CSS 屬性。此外,計算后的樣式也包含屬于瀏覽器內部樣式表的樣式信息,因此任何具有默認值的 CSS 屬性都會表現在計算后的樣式中</p> <p>1128、CSSStyleSheet 類型表示的是樣式表,包括通過 <link> 元素包含的樣式表和在 <b><style></b> 元素中定義的樣式表。有讀者可能記得,這兩個元素本身分別是由 HTMLLinkElement 和 HTMLStyleElement 類型表示的。但是, CSSStyleSheet 類型相對更加通用一些,它只表示樣式表,而不管這些樣式表在 HTML中是如何定義的。此外,上述兩個針對元素的類型允許修改 HTML特性,但 CSSStyleSheet 對象則是一套只讀的接口(有一個屬性例外)。disabled :表示樣式表是否被禁用的布爾值。這個屬性是可讀/寫的,將這個值設置為 true 可以禁用樣式表</p> <p>1129、其中三個最常用的屬性是 cssText 、 selectorText 和 style 。 cssText 屬性與 style.cssText屬性類似,但并不相同。前者包含選擇符文本和圍繞樣式信息的花括號,后者只包含樣式信息(類似于元素的 style.cssText )。此外, cssText 是只讀的,而 style.cssText 也可以被重寫</p> <p>1130、 insertRule() 方法接受兩個參數:規則文本和表示在哪里插入規則的索引。Firefox、Safari、Opera 和 Chrome都支持 insertRule() 方法。IE8 及更早版本支持一個類似的方法,名叫 addRule() ,也接收兩必選參數:選擇符文本和 CSS樣式信息;一個可選參數:插入規則的位置</p> <p>1131、從樣式表中刪除規則的方法是 deleteRule() ,這個方法接受一個參數:要刪除的規則的位置;IE 支持的類似方法叫 removeRule() ,使用方法相同。與添加規則相似,刪除規則也不是實際 Web 開發中常見的做法。考慮到刪除規則可能會影響 CSS層疊的效果,因此請大家慎重使用</p> <p>1132、偏移量。offsetHeight :元素在垂直方向上占用的空間大小,以像素計。包括元素的高度、(可見的)水平滾動條的高度、上邊框高度和下邊框高度;offsetWidth :元素在水平方向上占用的空間大小,以像素計。包括元素的寬度、(可見的)垂直滾動條的寬度、左邊框寬度和右邊框寬度;offsetLeft :元素的左外邊框至包含元素的左內邊框之間的像素距離;offsetTop :元素的上外邊框至包含元素的上內邊框之間的像素距離。要想知道某個元素在頁面上的偏移量,將這個元素的 offsetLeft 和 offsetTop 與其 offsetParent的相同屬性相加,如此循環直至根元素,就可以得到一個基本準確的值</p> <p>1133、所有這些偏移量屬性都是只讀的,而且每次訪問它們都需要重新計算。因此,應該盡量避免重復訪問這些屬性;如果需要重復使用其中某些屬性的值,可以將它們保存在局部變量中,以提高性能</p> <p>1134、元素的客戶區大小(client dimension),指的是元素內容及其內邊距所占據的空間大小。有關客戶區大小的屬性有兩個: clientWidth 和 clientHeight 。其中, clientWidth 屬性是元素內容區寬度加上左右內邊距寬度; clientHeight 屬性是元素內容區高度加上上下內邊距高度。注意這兩個屬性不包含邊框(border)</p> <p>1135、與偏移量相似,客戶區大小也是只讀的,也是每次訪問都要重新計算的</p> <p>1136、有些元素(例如<html> 元素),即使沒有執行任何代碼也能自動地添加滾動條;但另外一些元素,則需要通過 CSS 的overflow 屬性進行設置才能滾動。scrollHeight :在沒有滾動條的情況下,元素內容的總高度;scrollWidth :在沒有滾動條的情況下,元素內容的總寬度;scrollLeft :被隱藏在內容區域左側的像素數。通過設置這個屬性可以改變元素的滾動位置;scrollTop :被隱藏在內容區域上方的像素數。通過設置這個屬性可以改變元素的滾動位置</p> <p>1137、對于 不 包含 滾動 條 的頁 面而 言 , scrollWidth 和 scrollHeight 與 clientWidth 和clientHeight 之間的關系并不十分清晰</p> <p>1138、在確定文檔的總高度時(包括基于視口的最小高度時),必須取得 scrollWidth/clientWidth 和scrollHeight/clientHeight 中的最大值,才能保證在跨瀏覽器的環境下得到精確的結果</p> <p>1139、通過 scrollLeft 和 scrollTop 屬性既可以確定元素當前滾動的狀態,也可以設置元素的滾動位置。在元素尚未被滾動時,這兩個屬性的值都等于 0。如果元素被垂直滾動了,那么 scrollTop 的值會大于 0,且表示元素上方不可見內容的像素高度。如果元素被水平滾動了,那么 scrollLeft 的值會大于 0,且表示元素左側不可見內容的像素寬度。這兩個屬性都是可以設置的,因此將元素的scrollLeft 和 scrollTop 設置為 0,就可以重置元素的滾動位置</p> <p>1140、IE、Firefox 3+、Safari 4+、Opera 9.5及 Chrome為每個元素都提供了一個 getBoundingClientRect() 方法。這個方法返回會一個矩形對象,包含 4 個屬性: left 、 top 、 right 和 bottom 。這些屬性給出了元素在頁面中相對于視口的位置。但是,瀏覽器的實現稍有不同。IE8 及更早版本認為文檔的左上角坐標是(2, 2),而其他瀏覽器包括 IE9 則將傳統的(0,0)作為起點坐標。因此,就需要在一開始檢查一下位于(0,0)處的元素的位置,在 IE8 及更早版本中,會返回(2,2),而在其他瀏覽器中會返回(0,0)</p> <p>1141、對于不支持 getBoundingClientRect() 的瀏覽器,可以通過其他手段取得相同的信息。一般來說, right 和 left 的差值與 offsetWidth 的值相等,而 bottom 和 top 的差值與 offsetHeight相等。而且, left 和 top 屬性大致等于使用本章前面定義的 getElementLeft() 和 getElementTop()函數取得的值</p> <p>1142、DOM2 級在 Document 類型中定義了 createRange() 方法。在兼容 DOM 的瀏覽器中,這個方法屬于 document 對象。使用 hasFeature() 或者直接檢測該方法,都可以確定瀏覽器是否支持范圍</p> <p>1143、要使用范圍來選擇文檔中的一部分,最簡的方式就是使用 selectNode() 或 selectNodeContents() 。這兩個方法都接受一個參數,即一個 DOM 節點,然后使用該節點中的信息來填充范圍。其中,selectNode() 方法選擇整個節點,包括其子節點;而 selectNodeContents() 方法則只選擇節點的子節點</p> <p>1144、要創建復雜的范圍就得使用 setStart() 和 setEnd() 方法。這兩個方法都接受兩個參數:一個參照節點和一個偏移量值。對 setStart() 來說,參照節點會變成 startContainer ,而偏移量值會變成startOffset 。對于 setEnd() 來說,參照節點會變成 endContainer ,而偏移量值會變成 endOffset</p> <p>1145、使用 insertNode()方法可以向范圍選區的開始處插入一個節點。<b><span></b> 正好被插入到了 "Hello" 中的 "llo" 前面,而該位置就是范圍選區的開始位置。還要注意的是,由于這里沒有使用上一節介紹的方法,結果原始的 HTML 并沒有添加或刪除 <b><b></b> 元素。使用這種技術可以插入一些幫助提示信息,例如在打開新窗口的鏈接旁邊插入一幅圖像</p> <p>1146、除了向范圍內部插入內容之外,還可以環繞范圍插入內容,此時就要使用 surroundContents()方法。這個方法接受一個參數,即環繞范圍內容的節點。在環繞范圍插入內容時,后臺會執行下列步驟:提取出范圍中的內容(類似執行 extractContent() );將給定節點插入到文檔中原來范圍所在的位置上;將文檔片段的內容添加到給定節點中</p> <p>1147、所謂折疊范圍,就是指范圍中未選擇文檔的任何部分。使用 collapse() 方法來折疊范圍,這個方法接受一個參數,一個布爾值,表示要折疊到范圍的哪一端。參數 true 表示折疊到范圍的起點,參數 false 表示折疊到范圍的終點。要確定范圍已經折疊完畢,可以檢查 collapsed 屬性</p> <p>1148、可以使用 cloneRange() 方法復制范圍。這個方法會創建調用它的范圍的一個副本。新創建的范圍與原來的范圍包含相同的屬性,而修改它的端點不會影響原來的范圍</p> <p>1149、在使用完范圍之后,最好是調用 detach() 方法,以便從創建范圍的文檔中分離出該范圍。調用detach() 之后,就可以放心地解除對范圍的引用,從而讓垃圾回收機制回收其內存了</p> <p>1150、IE9、Firefox、Opera、Safari 和 Chrome 全都已經實現了“DOM2 級事件”模塊的核心部分。IE8 是最后一個仍然使用其專有事件系統的主要瀏覽器</p> <b>第十三章 事件</b> <p>1301、事件流描述的是從頁面中接收事件的順序。但有意思的是,IE 和 Netscape 開發團隊居然提出了差不多是完全相反的事件流的概念。IE 的事件流是事件冒泡流,而 Netscape Communicator 的事件流是事件捕獲流</p> <p>1302、IE 的事件流叫做事件冒泡(event bubbling),即事件開始時由最具體的元素(文檔中嵌套層次最深的那個節點)接收,然后逐級向上傳播到較為不具體的節點(文檔)</p> <p>1303、Netscape Communicator團隊提出的另一種事件流叫做事件捕獲(event capturing)。事件捕獲的思想是不太具體的節點應該更早接收到事件,而最具體的節點應該最后接收到事件。事件捕獲的用意在于在事件到達預定目標之前捕獲它</p> <p>1304、雖然事件捕獲是 Netscape Communicator 唯一支持的事件流模型,但 IE9、Safari、Chrome、Opera和 Firefox 目前也都支持這種事件流模型。盡管“DOM2 級事件”規范要求事件應該從 document 對象開始傳播,但這些瀏覽器都是從 window 對象開始捕獲事件的。</p> <p>1305、由于老版本的瀏覽器不支持,因此很少有人使用事件捕獲。我們也建議讀者放心地使用事件冒泡,在有特殊需要時再使用事件捕獲</p> <p>1306、“DOM2級事件”規定的事件流包括三個階段:事件捕獲階段、處于目標階段和事件冒泡階段。首先發生的是事件捕獲,為截獲事件提供了機會。然后是實際的目標接收到事件。最后一個階段是冒泡階段,可以在這個階段對事件做出響應</p> <p>1307、在 DOM 事件流中,實際的目標( <div> 元素)在捕獲階段不會接收到事件</p> <p>1308、多數支持 DOM事件流的瀏覽器都實現了一種特定的行為;即使“DOM2 級事件”規范明確要求捕獲階段不會涉及事件目標,但 IE9、Safari、Chrome、Firefox 和 Opera 9.5 及更高版本都會在捕獲階段觸發事件對象上的事件。結果,就是有兩個機會在目標對象上面操作事件。IE9、Opera、Firefox、Chrome 和 Safari 都支持 DOM 事件流;IE8 及更早版本不支持 DOM 事件流。</p> <p>1309、將事件處理程序設置為 null 之后,再單擊按鈕將不會有任何動作發生</p> <p>1310、“DOM2級事件”定義了兩個方法,用于處理指定和刪除事件處理程序的操作: addEventListener()和 removeEventListener() 。所有 DOM 節點中都包含這兩個方法,并且它們都接受 3 個參數:要處理的事件名、作為事件處理程序的函數和一個布爾值。最后這個布爾值參數如果是 true ,表示在捕獲階段調用事件處理程序;如果是 false ,表示在冒泡階段調用事件處理程序</p> <p>1311、通過 addEventListener() 添加的事件處理程序只能使用 removeEventListener() 來移除;移除時傳入的參數與添加處理程序時使用的參數相同。這也意味著通過 addEventListener() 添加的匿名函數將無法移除。把傳入的匿名函數賦給一個變量,在添加事件監聽或移除事件監聽使用該變量可以移除</p> <p>1312、大多數情況下,都是將事件處理程序添加到事件流的冒泡階段,這樣可以最大限度地兼容各種瀏覽器。最好只在需要在事件到達目標之前截獲它的時候將事件處理程序添加到捕獲階段。如果不是特別需要,我們不建議在事件捕獲階段注冊事件處理程序</p> <p>1313、IE 實現了與 DOM 中類似的兩個方法: attachEvent() 和 detachEvent() 。這兩個方法接受相同的兩個參數:事件處理程序名稱與事件處理程序函數。由于 IE8 及更早版本只支持事件冒泡,所以通過attachEvent() 添加的事件處理程序都會被添加到冒泡階段。注意, attachEvent() 的第一個參數是 "onclick" ,而非 DOM 的 addEventListener() 方法中的 "click"</p> <p>1314、在 IE 中使用 attachEvent() 與使用 DOM0 級方法的主要區別在于事件處理程序的作用域。在使用 DOM0 級方法的情況下,事件處理程序會在其所屬元素的作用域內運行;在使用 attachEvent() 方法的情況下,事件處理程序會在全局作用域中運行,因此 this 等于 window</p> <p>1315、這里調用了兩次 attachEvent() ,為同一個按鈕添加了兩個不同的事件處理程序。不過,與 DOM方法不同的是,這些事件處理程序不是以添加它們的順序執行,而是以相反的順序被觸發</p> <p>1316、使用 attachEvent() 添加的事件可以通過 detachEvent() 來移除,條件是必須提供相同的參數。與 DOM 方法一樣,這也意味著添加的匿名函數將不能被移除。不過,只要能夠將對相同函數的引用傳給 detachEvent() ,就可以移除相應的事件處理程序</p> <p>1317、在觸發 DOM 上的某個事件時,會產生一個事件對象 event ,這個對象中包含著所有與事件有關的信息。包括導致事件的元素、事件的類型以及其他與特定事件相關的信息。例如,鼠標操作導致的事件對象中,會包含鼠標位置的信息,而鍵盤操作導致的事件對象中,會包含與按下的鍵有關的信息。所有瀏覽器都支持 event 對象,但支持方式不同</p> <p>1318、在事件處理程序內部,對象 this 始終等于 currentTarget 的值,而 target 則只包含事件的實際目標。如果直接將事件處理程序指定給了目標元素,則 this 、 currentTarget 和 target 包含相同的值。如果事件處理程序存在于按鈕的父節點中(例如 document.body ),那么這些值是不相同的</p> <p>1319、事件委托是通過事件冒泡來實現的</p> <p>1320、要阻止特定事件的默認行為,可以使用 preventDefault() 方法。例如,鏈接的默認行為就是在被單擊時會導航到其 href 特性指定的 URL。如果你想阻止鏈接導航這一默認行為,那么通過鏈接的onclick 事件處理程序可以取消它</p> <p>1321、只有 cancelable 屬性設置為 true 的事件,才可以使用 preventDefault() 來取消其默認行為</p> <p>1322、 stopPropagation() 方法用于立即停止事件在 DOM 層次中的傳播,即取消進一步的事件捕獲或冒泡</p> <p>1323、事件對象的eventPhase屬性,可以用來確定事件當前正位于事件流的哪個階段。如果是在捕獲階段調用的事件處理程序,那么 eventPhase 等于 1 ;如果事件處理程序處于目標對象上,則event-Phase等于2;如果是在冒泡階段調用的事件處理程序, eventPhase 等于 3</p> <p>1324、只有在事件處理程序執行期間, event 對象才會存在;一旦事件處理程序執行完成, event 對象就會被銷毀</p> <p>1325、 returnValue 屬性相當于 DOM中的 preventDefault() 方法,它們的作用都是取消給定事件的默認行為。只要將 returnValue 設置為 false ,就可以阻止默認行為</p> <p>1326、cancelBubble 屬性與 DOM 中的 stopPropagation() 方法作用相同,都是用來停止事件冒泡的。由于 IE 不支持事件捕獲,因而只能取消事件冒泡;但 stopPropagatioin() 可以同時取消事件捕獲和冒泡</p> <p>1327、在 onclick 事件處理程序中將 cancelBubble 設置為 true ,就可阻止事件通過冒泡而觸發document.body 中注冊的事件處理程序</p> <p>1328、JavaScript 中最常用的一個事件就是 load 。當頁面完全加載后(包括所有圖像、JavaScript 文件、CSS 文件等外部資源),就會觸發 window 上面的 load 事件</p> <p>1329、與 load 事件對應的是 unload 事件,這個事件在文檔被完全卸載后觸發。只要用戶從一個頁面切換到另一個頁面,就會發生 unload 事件</p> <p>1330、當瀏覽器窗口被調整到一個新的高度或寬度時,就會觸發 resize 事件。這個事件在 window (窗口)上面觸發,因此可以通過 JavaScript 或者 <body> 元素中的 onresize 特性來指定事件處理程序</p> <p>1331、關于何時會觸發 resize 事件,不同瀏覽器有不同的機制。IE、Safari、Chrome 和 Opera 會在瀏覽器窗口變化了 1 像素時就觸發 resize 事件,然后隨著變化不斷重復觸發。Firefox 則只會在用戶停止調整窗口大小時才會觸發 resize 事件。由于存在這個差別,應該注意不要在這個事件的處理程序中加入大計算量的代碼,因為這些代碼有可能被頻繁執行,從而導致瀏覽器反應明顯變慢。瀏覽器窗口最小化或最大化時也會觸發 resize 事件</p> <p>1332、焦點事件會在頁面元素獲得或失去焦點時觸發。利用這些事件并與document.hasFocus()方法及document.activeElement 屬性配合,可以知曉用戶在頁面上的行蹤</p> <p>1333、 focus 和 blur ,它們都是 JavaScript 早期就得到所有瀏覽器支持的事件。這些事件的最大問題是它們不冒泡。因此,IE 的 focusin 和 focusout 與 Opera 的 DOMFocusIn和 DOMFocusOut 才會發生重疊。IE 的方式最后被 DOM3 級事件采納為標準方式</p> <p>1334、鼠標事件中還有一類滾輪事件。而說是一類事件,其實就是一個 mousewheel 事件。這個事件跟蹤鼠標滾輪,類似于 Mac 的觸控板</p> <p>1335、鼠標事件都是在瀏覽器視口中的特定位置上發生的。這個位置信息保存在事件對象的 clientX 和clientY 屬性中。所有瀏覽器都支持這兩個屬性,它們的值表示事件發生時鼠標指針在視口中的水平和垂直坐標。注意,這些值中不包括頁面滾動的距離,因此這個位置并不表示鼠標在頁面上的位置。</p> <p>1336、頁面坐標通過事件對象的pageX和pageY屬性,能告訴你事件是在頁面中的什么位置發生的。換句話說,這兩個屬性表示鼠標光標在頁面中的位置,因此坐標是從頁面本身而非視口的左邊和頂邊計算的</p> <p>1337、IE8 及更早版本不支持事件對象上的頁面坐標,不過使用客戶區坐標和滾動信息可以計算出來。這時候需要用到 document.body (混雜模式)或 document.documentElement (標準模式)中的scrollLeft 和 scrollTop 屬性</p> <p>1338、通過 screenX 和 screenY 屬性就可以確定鼠標事件發生時鼠標指針相對于整個屏幕的坐標信息</p> <p>1339、雖然鼠標事件主要是使用鼠標來觸發的,但在按下鼠標時鍵盤上的某些鍵的狀態也可以影響到所要采取的操作。這些修改鍵就是 Shift、Ctrl、Alt 和 Meta(在 Windows鍵盤中是 Windows鍵,在蘋果機中是 Cmd 鍵),它們經常被用來修改鼠標事件的行為。DOM 為此規定了 4 個屬性,表示這些修改鍵的狀態: shiftKey 、 ctrlKey 、 altKey 和 metaKey 。這些屬性中包含的都是布爾值,如果相應的鍵被按下了,則值為 true ,否則值為 false 。當某個鼠標事件發生時,通過檢測這幾個屬性就可以確定用戶是否同時按下了其中的鍵</p> <p>1340、DOM通過 event 對象的 relatedTarget 屬性提供了相關元素的信息。這個屬性只對于 mouseover和 mouseout 事件才包含值;對于其他事件,這個屬性的值是 null</p> <p>1341、只有在主鼠標按鈕被單擊(或鍵盤回車鍵被按下)時才會觸發 click事件,因此檢測按鈕的信息并不是必要的。但對于 mousedown 和 mouseup 事件來說,則在其 event 對象存在一個 button 屬性,表示按下或釋放的按鈕。DOM 的 button 屬性可能有如下 3 個值: 0 表示主鼠標按鈕, 1 表示中間的鼠標按鈕(鼠標滾輪按鈕), 2 表示次鼠標按鈕</p> <p>1342、“DOM2 級事件”規范在 event 對象中還提供了 detail 屬性,用于給出有關事件的更多信息。對于鼠標事件來說, detail 中包含了一個數值,表示在給定位置上發生了多少次單擊。在同一個元素上相繼地發生一次 mousedown 和一次 mouseup 事件算作一次單擊。 detail 屬性從 1 開始計數,每次單擊發生后都會遞增</p> <p>1343、IE 6.0 首先實現了 mousewheel 事件。此后,Opera、Chrome 和 Safari 也都實現了這個事件。當用戶通過鼠標滾輪與頁面交互、在垂直方向上滾動頁面時(無論向上還是向下),就會觸發 mousewheel事件。這個事件可以在任何元素上面觸發,最終會冒泡到 document (IE8)或 window (IE9、Opera、Chrome 及 Safari)對象。與 mousewheel 事件對應的 event 對象除包含鼠標事件的所有標準信息外,還包含一個特殊的 wheelDelta 屬性。當用戶向前滾動鼠標滾輪時, wheelDelta 是 120 的倍數;當用戶向后滾動鼠標滾輪時, wheelDelta 是?120 的倍數。</p> <p>1344、多數情況下,只要知道鼠標滾輪滾動的方向就夠了,而這通過檢測 wheelDelta 的正負號就可以確定。有一點要注意:在 Opera 9.5 之前的版本中, wheelDelta 值的正負號是顛倒的。如果你打算支持早期的 Opera 版本,就需要使用瀏覽器檢測技術來確定實際的值</p> <p>1345、鍵盤事件keydown、keypress、keyup與鼠標事件一樣,都支持相同的修改鍵。而且,鍵盤事件的事件對象中也有 shiftKey 、 ctrlKey 、 altKey 和 metaKey 屬性。IE 不支持 metaKey</p> <p>1346、鍵碼在發生 keydown 和 keyup 事件時, event 對象的 keyCode 屬性中會包含一個代碼,與鍵盤上一個特定的鍵對應。對數字字母字符鍵, keyCode 屬性的值與 ASCII 碼中對應小寫字母或數字的編碼相同</p> <p>1347、發生 keypress 事件意味著按下的鍵會影響到屏幕中文本的顯示。在所有瀏覽器中,按下能夠插入或刪除字符的鍵都會觸發 keypress 事件;按下其他鍵能否觸發此事件因瀏覽器而異</p> <p>1348、IE8及之前版本和Opera則是在 keyCode 中保存字符的ASCII編碼。要想以跨瀏覽器的方式取得字符編碼,必須首先檢測 charCode 屬性是否可用,如果不可用則使用 keyCode。在取得了字符編碼之后,就可以使用 String.fromCharCode() 將其轉換成實際的字符</p> <p>1349、盡管所有瀏覽器都實現了某種形式的鍵盤事件,DOM3 級事件還是做出了一些改變。比如,DOM3級事件中的鍵盤事件,不再包含 charCode 屬性,而是包含兩個新屬性: key 和 char。其中, key 屬性是為了取代 keyCode 而新增的,它的值是一個字符串。在按下某個字符鍵時, key的值就是相應的文本字符(如“k”或“M”);在按下非字符鍵時, key 的值是相應鍵的名(如“Shift”或“Down”)。而 char 屬性在按下字符鍵時的行為與 key 相同,但在按下非字符鍵時值為 null。由于存在跨瀏覽器問題,因此本書不推薦使用 key 、 keyIdentifier 或 char</p> <p>1350、 event 對象上還有一個屬性,叫 inputMethod ,表示把文本輸入到文本框中的方式。 1,表示是使用鍵盤輸入的;2,表示文本是粘貼進來的; 3,表示文本是拖放進來的; 7,表示文本是通過語音輸入的</p> <p>1351、支持 textInput 屬性的瀏覽器有 IE9+、Safari 和 Chrome。只有 IE 支持 inputMethod 屬性</p> <p>1352、在所有瀏覽器中都可以取消這個事件:在兼容 DOM 的瀏覽器中,使用 event.preventDefalut() ;在 IE 中,將 event.returnValue 的值設置為 false 。因為 contextmenu 事件屬于鼠標事件,所以其事件對象中包含與光標位置有關的所有屬性。通常使用 contextmenu 事件來顯示自定義的上下文菜單,而使用 onclick 事件處理程序來隱藏該菜單。支持 contextmenu 事件的瀏覽器有 IE、Firefox、Safari、Chrome 和 Opera 11+</p> <p>1353、之所以有發生在 window 對象上的 beforeunload 事件,是為了讓開發人員有可能在頁面卸載前阻止這一操作。這個事件會在瀏覽器卸載頁面之前觸發,可以通過它來取消卸載并繼續使用原有頁面。但是,不能徹底取消這個事件,因為那就相當于讓用戶無法離開當前頁面了。為此,這個事件的意圖是將控制權交給用戶。顯示的消息會告知用戶頁面行將被卸載(正因為如此才會顯示這個消息),詢問用戶是否真的要關閉頁面,還是希望繼續留下來。IE 和 Firefox、Safari 和 Chrome 都支持 beforeunload 事件,也都會彈出這個對話框詢問用戶是否真想離開。Opera 11 及之前的版本不支持 beforeunload 事件</p> <p>1354、touchstart :當手指觸摸屏幕時觸發;即使已經有一個手指放在了屏幕上也會觸發。touchmove :當手指在屏幕上滑動時連續地觸發。在這個事件發生期間,調用 preventDefault()可以阻止滾動。touchend :當手指從屏幕上移開時觸發。touchcancel :當系統停止跟蹤觸摸時觸發。關于此事件的確切觸發時間,文檔中沒有明確說明。上面這幾個事件都會冒泡,也都可以取消</p> <p>1355、gesturestart :當一個手指已經按在屏幕上而另一個手指又觸摸屏幕時觸發。gesturechange :當觸摸屏幕的任何一個手指的位置發生變化時觸發。gestureend :當任何一個手指從屏幕上面移開時觸發。</p> <p>1356、事件委托利用了事件冒泡,只指定一個事件處理程序,就可以管理某一類型的所有事件。使用事件委托,只需在DOM 樹中盡量最高的層次上添加一個事件處理程序。最適合采用事件委托技術的事件包括 click 、 mousedown 、 mouseup 、 keydown 、 keyup 和 keypress 。雖然 mouseover 和 mouseout 事件也冒泡,但要適當處理它們并不容易,而且經常需要計算元素的位置</p> <p>1357、第一種情況就是從文檔中移除帶有事件處理程序的元素時。這可能是通過純粹的 DOM 操作,例如使用 removeChild() 和 replaceChild() 方法,但更多地是發生在使用 innerHTML 替換頁面中某一部分的時候。如果帶有事件處理程序的元素被 innerHTML 刪除了,那么原來添加到元素中的事件處理程序極有可能無法被當作垃圾回收;導致“空事件處理程序”的另一種情況,就是卸載頁面的時候</p> <b>第十四章 表單腳本</b> <p>1401、在以調用 submit() 方法的形式提交表單時,不會觸發 submit 事件,因此要記得在調用此方法之前先驗證表單數據</p> <p>1402、提交表單時可能出現的最大問題,就是重復提交表單。在第一次提交表單后,如果長時間沒有反應,用戶可能會變得不耐煩。這時候,他們也許會反復單擊提交按鈕。結果往往很麻煩(因為服務器要處理重復的請求),或者會造成錯誤(如果用戶是下訂單,那么可能會多訂好幾份)。解決這一問題的辦法有兩個:在第一次提交表單后就禁用提交按鈕,或者利用 onsubmit 事件處理程序取消后續的表單提交操作</p> <p>1403、每個表單都有elements 屬性,該屬性是表單中所有表單元素(字段)的集合。這個 elements 集合是一個有序列表,其中包含著表單中的所有字段,例如 <b><input> 、 <textarea> 、 <button> 和 <fieldset></b> 。每個表單字段在 elements 集合中的順序,與它們出現在標記中的順序相同,可以按照位置和 name 特性來訪問它們。如果有多個表單控件都在使用一個 name (如單選按鈕),那么就會返回以該 name 命名的一個NodeList</p> <p>1404、很多用戶可能會重復單擊表單的提交按鈕。在涉及信用卡消費時,這就是個問題:因為會導致費用翻番。為此,最常見的解決方案,就是在第一次單擊后就禁用提交按鈕。只要偵聽 submit 事件,并在該事件發生時禁用提交按鈕即可</p> <p>1405、HTML5 為表單字段新增了一個 autofocus 屬性。在支持這個屬性的瀏覽器中,只要設置這個屬性,不用 JavaScript 就能自動把焦點移動到相應字段</p> <p>1406、在默認情況下,只有表單字段可以獲得焦點。對于其他元素而言,如果先將其tabIndex 屬性設置為?1,然后再調用 focus() 方法,也可以讓這些元素獲得焦點。只有 Opera 不支持這種技術</p> <p>1407、關于 blur 和 change 事件的關系,并沒有嚴格的規定。在某些瀏覽器中, blur事件會先于 change 事件發生;而在其他瀏覽器中,則恰好相反。為此,不能假定這兩個事件總會以某種順序依次觸發,這一點要特別注意</p> <p>1408、要表現文本框,必須將 <b><input></b> 元素的 type 特性設置為 "text" 。而通過設置 size 特性,可以指定文本框中能夠顯示的字符數。通過 value 特性,可以設置文本框的初始值,而 maxlength 特性則用于指定文本框可以接受的最大字符數</p> <p>1409、<b><textarea></b> 元素則始終會呈現為一個多行文本框。要指定文本框的大小,可以使用 rows和 cols 特性。其中, rows 特性指定的是文本框的字符行數,而 cols 特性指定的是文本框的字符列數(類似于 <b><inpu></b> 元素的 size 特性)。與 <b><input></b> 元素不同, <b><textarea></b> 的初始值必須要放在<b><textarea></b> 和 <b></textarea></b> 之間</p> <p>1410、 select() 方法,這個方法用于選擇文本框中的所有文本。在調用 select()方法時,大多數瀏覽器(Opera 除外)都會將焦點設置到文本框中。這個方法不接受參數,可以在任何時候被調用</p> <p>420、 select 事件。在選擇了文本框中的文本時,就會觸發 select事件。不過,到底什么時候觸發 select 事件,還會因瀏覽器而異。在 IE9+、Opera、Firefox、Chrome和 Safari 中,只有用戶選擇了文本(而且要釋放鼠標),才會觸發 select 事件。而在 IE8 及更早版本中,只要用戶選擇了一個字母(不必釋放鼠標),就會觸發 select 事件。另外,在調用 select() 方法時也會觸發 select 事件</p> <p>1411、取得選擇的文本。HTML5 通過一些擴展方案解決了這個問題,以便更順利地取得選擇的文本。該規范采取的辦法是添加兩個屬性: selectionStart 和 selectionEnd 。這兩個屬性中保存的是基于 0 的數值,表示所選擇文本的范圍(即文本選區開頭和結尾的偏移量)</p> <p>1412、HTML5也為選擇文本框中的部分文本提供了解決方案 , 即 最 早 由 Firefox 引 入 的setSelectionRange() 方法。現在除 select() 方法之外,所有文本框都有一個 setSelectionRange()方法。這個方法接收兩個參數:要選擇的第一個字符的索引和要選擇的最后一個字符之后的字符的索引(類似于 substring() 方法的兩個參數)</p> <p>1413、 clipboardData 對象有三個方法: getData() 、 setData() 和 clearData() 。其中, getData()用于從剪貼板中取得數據,它接受一個參數,即要取得的數據的格式; setData() 方法的第一個參數也是數據類型,第二個參數是要放在剪貼板中的文本</p> <p>1414、任何標注有 required 的字段,在提交表單時都不能空著。這個屬性適用于 <b><input> 、 <textarea>和 <select></b> 字段(Opera 11 及之前版本還不支持 <b><select></b> 的 required 屬性)。在 JavaScript 中,通過對應的 required 屬性,可以檢查某個表單字段是否為必填字段</p> <p>1415、HTML5 為文本字段新增了 pattern 屬性。這個屬性的值是一個正則表達式,用于匹配文本框中的值</p> <p>1416、使用 checkValidity() 方法可以檢測表單中的某個字段是否有效。所有表單字段都有個方法,如果字段的值有效,這個方法返回 true ,否則返回 false 。字段的值是否有效的判斷依據是本節前面介紹過的那些約束。換句話說,必填字段中如果沒有值就是無效的,而字段中的值與 pattern 屬性不匹配也是無效的</p> <p>1417、要檢測整個表單是否有效,可以在表單自身調用 checkValidity() 方法。如果所有表單字段都有效,這個方法返回 true ;即使有一個字段無效,這個方法也會返回 false</p> <p>1418、對于只允許選擇一項的選擇框,訪問選中項的最簡單方式,就是使用選擇框的 selectedIndex 屬性</p> <p>1419、與 selectedIndex 不同,在允許多選的選擇框中設置選項的 selected 屬性,不會取消對其他選中項的選擇,因而可以動態選中任意多個項。但是,如果是在單選選擇框中,修改某個選項的 selected 屬性則會取消對其他選項的選擇。需要注意的是,將 selected 屬性設置為 false 對單選選擇框沒有影響</p> <p>1420、 contenteditable 屬性應用給頁面中的任何元素,然后用戶立即就可以編輯該元素。document.body.contentEditable="true"</p> <b>第十五章 使用canvas繪圖</b> <b>第十六章 HTML5腳本編程</b> <b>第十七章 錯誤處理與調試</b> <p>1701、在 IE7 及更早版本中,如果錯誤發生在位于外部文件的腳本中,行號通常會與錯誤所在的行號差 1。如果是嵌入在頁面中的腳本發生錯誤,則行號就是錯誤所在的行號</p> <p>1702、ECMA-262 第 3 版引入了 try-catch 語句,作為 JavaScript 中處理異常的一種標準方式。也就是說,我們應該把所有可能會拋出錯誤的代碼都放在 try 語句塊中,而把那些用于錯誤處理的代碼放在 catch 塊中。如果 try 塊中的任何代碼發生了錯誤,就會立即退出代碼執行過程,然后接著執行 catch 塊。此時, catch 塊會接收到一個包含錯誤信息的對象。與在其他語言中不同的是,即使你不想使用這個錯誤對象,也要給它起個名字。這個對象中包含的實際信息會因瀏覽器而異,但共同的是有一個保存著錯誤消息的 message 屬性。ECMA-262 還規定了一個保存錯誤類型的 name 屬性;當前所有瀏覽器都支持這個屬性(Opera 9 之前的版本不支持這個屬性)。因此,在發生錯誤時,就可以像下面這樣實事求是地顯示瀏覽器給出的消息</p> <p>1703、只要代碼中包含 finally 子句,那么無論 try 還是 catch 語句塊中的 return 語句都將被忽略。因此,在使用 finally 子句之前,一定要非常清楚你想讓代碼怎么樣</p> <p>1704、TypeError 類型在 JavaScript 中會經常用到,在變量中保存著意外的類型時,或者在訪問不存在的方法時,都會導致這種錯誤。錯誤的原因雖然多種多樣,但歸根結底還是由于在執行特定于類型的操作時,變量的類型并不符合要求所致</p> <p>1705、使用 try-catch 最適合處理那些我們無法控制的錯誤。假設你在使用一個大型 JavaScript 庫中的函數,該函數可能會有意無意地拋出一些錯誤。由于我們不能修改這個庫的源代碼,所以大可將對該函數的調用放在 try-catch 語句當中,萬一有什么錯誤發生,也好恰當地處理它們</p> <p>1706、在遇到 throw 操作符時,代碼會立即停止執行。僅當有 try-catch 語句捕獲到被拋出的值時,代碼才會繼續執行</p> <p>437、利用原型鏈還可以通過繼承 Error 來創建自定義 </div> <div id="xnvrdxb" class="mt-64 tags-seach" > <div id="drv3zxj" class="tags-info"> <a style="width:120px;" title="云服務器" href="http://specialneedsforspecialkids.com/site/active/kuaijiesale.html?ytag=seo">云服務器</a> <a style="width:120px;" title="GPU云服務器" href="http://specialneedsforspecialkids.com/site/product/gpu.html">GPU云服務器</a> <a style="width:120px;" title="javascript高級程序設計第三版" href="http://specialneedsforspecialkids.com/yun/tag/javascriptgaojichengxushejidisanban/">javascript高級程序設計第三版</a> <a style="width:120px;" title="javascript第三版" href="http://specialneedsforspecialkids.com/yun/tag/javascriptdisanban/">javascript第三版</a> <a style="width:120px;" title="c語言程序設計第三版" href="http://specialneedsforspecialkids.com/yun/tag/cyuyanchengxushejidisanban/">c語言程序設計第三版</a> <a style="width:120px;" title="匯編語言程序設計第三版" href="http://specialneedsforspecialkids.com/yun/tag/huibianyuyanchengxushejidisanban/">匯編語言程序設計第三版</a> </div> </div> <div id="bjf5lvx" class="entry-copyright mb-30"> <p class="mb-15"> 文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。</p> <p>轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107738.html</p> </div> <ul class="pre-next-page"> <li id="vzrdznd" class="ellipsis"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/107737.html">上一篇:antd源碼解讀(二)Tooltip組件解析</a></li> <li id="v3tzvvd" class="ellipsis"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/107739.html">下一篇:javascript高級程序設計(第三版)學習摘錄上</a></li> </ul> </div> <div id="p3tfblj" class="about_topicone-mid"> <h3 class="top-com-title mb-0"><span data-id="0">相關文章</span></h3> <ul class="com_white-left-mid atricle-list-box"> <li> <div id="dhnbttj" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/107739.html"><b><em>javascript</em><em>高級</em><em><em>程序</em><em>設計</em></em>(<em>第<em>三版</em></em>)<em>學習</em><em>摘錄</em>上</b></a></h2> <p class="ellipsis2 good">摘要:在這種情況下,函數在停止執行后將返回值。這種用法一般用在需要提前停止函數執行而又不需要返回值的情況下嚴格模式對函數有一些限制不能把函數命名為或不能把參數命名為或不能出現兩個命名參數同名的情況。 把近期看高程這本書做的筆記摘錄整理出來了,總歸對原生javascript理論有了一個比較全面的的認識,這次把書中的一些知識要點摘錄出來了,便于以后查閱的時候有方向,也更有效率!! 第一章、jav...</p> <div id="r7lxbp9" class="com_white-left-info"> <div id="npdpt1z" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-1102.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/11/small_000001102.jpg" alt=""><span id="vtn3lxt" class="layui-hide64">leap_frog</span></a> <time datetime="">2019-08-26 11:52</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="jtj7rhd" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/89720.html"><b>《<em>Javascript</em><em>高級</em><em><em>程序</em><em>設計</em></em> (<em>第<em>三版</em></em>)》第五章 引用類型</b></a></h2> <p class="ellipsis2 good">摘要:類型沒有重載聲明了兩個同名函數,而結果則是后面的函數覆蓋了前面的函數。引用的是函數據以執行的環境對象函數屬性和方法表示函數希望接收的命名參數的個數。而自動創建的基本包裝類型的對象,則只存在于一行代碼的執行瞬間,然后立即被銷毀。 Function類型 沒有重載 聲明了兩個同名函數,而結果則是后面的函數覆蓋了前面的函數。 var addSomeNumber = function (num)...</p> <div id="93jf5dr" class="com_white-left-info"> <div id="lplvhrl" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-526.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/05/small_000000526.jpg" alt=""><span id="jbfnxv7" class="layui-hide64">GeekGhc</span></a> <time datetime="">2019-08-21 17:35</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="pxddd71" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/89519.html"><b>《<em>Javascript</em><em>高級</em><em><em>程序</em><em>設計</em></em> (<em>第<em>三版</em></em>)》<em>第三</em>章 基本概念</b></a></h2> <p class="ellipsis2 good">摘要:如在上列中結果實際上是給定數字的字符串形式無效語法有效語法在上列中結果是因為第一個被視為的一部分,第二個是屬性訪問運算符。用于檢查傳入的對象是否是傳入對象的原型第章將討論原型。返回對象的字符串表示。 只挑本人重要的寫(有夾雜其他補充) 3.1 語法 注釋 單行注釋以兩個斜杠開頭,如下所示: // 單行注釋 塊級注釋以一個斜杠和一個星號( /* )開頭, 以一個星號和...</p> <div id="vtt99pv" class="com_white-left-info"> <div id="pf75txz" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-1332.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/13/small_000001332.jpg" alt=""><span id="vx9j3t7" class="layui-hide64">caige</span></a> <time datetime="">2019-08-21 17:26</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="f99pfbr" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/114009.html"><b><em>JavaScript</em> <em>高級</em><em><em>程序</em><em>設計</em></em>(<em>第<em>三版</em></em>)筆記</b></a></h2> <p class="ellipsis2 good">摘要:以上是使用轉換函數方法時會返回的值在用判斷的時候,首先執行了,然后判斷為真或假。對象的遍歷返回一個數組,包括對象自身的不含繼承的所有可枚舉屬性不含屬性的鍵名。 tip:本文含部分Es6語法 1.if(a)的自動轉換 數據類型??? 轉換為true的值??? ?? 轉換為false的值 ? Boolean ?? ? true??????????? ? false ??String? 任何...</p> <div id="3vldll7" class="com_white-left-info"> <div id="vb5jb7v" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-679.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/06/small_000000679.jpg" alt=""><span id="bpvbvxj" class="layui-hide64">tulayang</span></a> <time datetime="">2019-08-29 16:57</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="vjzdnbn" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/53051.html"><b><em>JavaScript</em> <em>高級</em><em><em>程序</em><em>設計</em></em>(<em>第<em>三版</em></em>)筆記</b></a></h2> <p class="ellipsis2 good">摘要:以上是使用轉換函數方法時會返回的值在用判斷的時候,首先執行了,然后判斷為真或假。對象的遍歷返回一個數組,包括對象自身的不含繼承的所有可枚舉屬性不含屬性的鍵名。 tip:本文含部分Es6語法 1.if(a)的自動轉換 數據類型??? 轉換為true的值??? ?? 轉換為false的值 ? Boolean ?? ? true??????????? ? false ??String? 任何...</p> <div id="lnvdv7l" class="com_white-left-info"> <div id="7ldtzzb" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-544.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/05/small_000000544.jpg" alt=""><span id="lx5pfrt" class="layui-hide64">leo108</span></a> <time datetime="">2019-08-02 11:41</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> </ul> </div> <div id="j7hznxz" class="topicone-box-wangeditor"> <h3 class="top-com-title mb-64"><span>發表評論</span></h3> <div id="7v7vddr" class="xcp-publish-main flex_box_zd"> <div id="xnftxll" class="unlogin-pinglun-box"> <a href="javascript:login()" class="grad">登陸后可評論</a> </div> </div> </div> <div id="hvlphjl" class="site-box-content"> <div id="thldt7l" class="site-content-title"> <h3 class="top-com-title mb-64"><span>0條評論</span></h3> </div> <div id="9j5hz7t" class="pages"></ul></div> </div> </div> <div id="v755zzz" class="layui-col-md4 layui-col-lg3 com_white-right site-wrap-right"> <div id="fr5n57j" class=""> <div id="5zz5xpf" class="com_layuiright-box user-msgbox"> <a href="http://specialneedsforspecialkids.com/yun/u-241.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/02/small_000000241.jpg" alt=""></a> <h3><a href="http://specialneedsforspecialkids.com/yun/u-241.html" rel="nofollow">yiliang</a></h3> <h6>男<span>|</span>高級講師</h6> <div id="vhvr5vj" class="flex_box_zd user-msgbox-atten"> <a href="javascript:attentto_user(241)" id="attenttouser_241" class="grad follow-btn notfollow attention">我要關注</a> <a href="javascript:login()" title="發私信" >我要私信</a> </div> <div id="llbrvj5" class="user-msgbox-list flex_box_zd"> <h3 class="hpf">TA的文章</h3> <a href="http://specialneedsforspecialkids.com/yun/ut-241.html" class="box_hxjz">閱讀更多</a> </div> <ul class="user-msgbox-ul"> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/123642.html">『學了就忘』Linux軟件包管理 — 45、yum源文件詳細說明</a></h3> <p>閱讀 2609<span>·</span>2021-11-17 17:00</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/122101.html">Vue devtools工具安裝 Chrome安裝Vue devtools 教程步驟</a></h3> <p>閱讀 1863<span>·</span>2021-10-11 10:57</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/119703.html">ReliableSite:美國服務器租用(紐約/邁阿密/洛杉磯);E5-1650v3/128GB/2</a></h3> <p>閱讀 3716<span>·</span>2021-09-09 11:33</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/119658.html">一篇文章帶你了解如何用Planting 為測試工程師開發的部署框架</a></h3> <p>閱讀 911<span>·</span>2021-09-09 09:33</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/115947.html">BFC深入理解</a></h3> <p>閱讀 3550<span>·</span>2019-08-30 14:20</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/111639.html">好用的sublime text 插件(有空的時候持續更新)</a></h3> <p>閱讀 3311<span>·</span>2019-08-29 11:25</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/109571.html">nginx 常用命令</a></h3> <p>閱讀 2796<span>·</span>2019-08-26 13:48</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/107738.html">javascript高級程序設計(第三版)學習摘錄下</a></h3> <p>閱讀 734<span>·</span>2019-08-26 11:52</p></li> </ul> </div> <!-- 文章詳情右側廣告--> <div id="fffjz7h" class="com_layuiright-box"> <h6 class="top-com-title"><span>最新活動</span></h6> <div id="v5p57lz" class="com_adbox"> <div id="x7phljl" class="layui-carousel" id="right-item"> <div carousel-item> <div> <a href="http://specialneedsforspecialkids.com/site/active/kuaijiesale.html?ytag=seo" rel="nofollow"> <img src="http://specialneedsforspecialkids.com/yun/data/attach/240625/2rTjEHmi.png" alt="云服務器"> </a> </div> <div> <a href="http://specialneedsforspecialkids.com/site/product/gpu.html" rel="nofollow"> <img src="http://specialneedsforspecialkids.com/yun/data/attach/240807/7NjZjdrd.png" alt="GPU云服務器"> </a> </div> </div> </div> </div> <!-- banner結束 --> <div id="pnbjpbd" class="adhtml"> </div> <script> $(function(){ $.ajax({ type: "GET", url:"http://specialneedsforspecialkids.com/yun/ad/getad/1.html", cache: false, success: function(text){ $(".adhtml").html(text); } }); }) </script> </div> </div> </div> </div> </div> </section> <!-- wap拉出按鈕 --> <div id="hvbhpdd" class="site-tree-mobile layui-hide"> <i class="layui-icon layui-icon-spread-left"></i> </div> <!-- wap遮罩層 --> <div id="bbvdxzz" class="site-mobile-shade"></div> <!--付費閱讀 --> <div class="7l55njx" id="payread"> <div id="xlp5dxh" class="layui-form-item">閱讀需要支付1元查看</div> <div id="h7tzdft" class="layui-form-item"><button class="btn-right">支付并查看</button></div> </div> <script> var prei=0; $(".site-seo-depict pre").each(function(){ var html=$(this).html().replace("<code>","").replace("</code>","").replace('<code class="javascript hljs" codemark="1">',''); $(this).attr('data-clipboard-text',html).attr("id","pre"+prei); $(this).html("").append("<code>"+html+"</code>"); prei++; }) $(".site-seo-depict img").each(function(){ if($(this).attr("src").indexOf('data:image/svg+xml')!= -1){ $(this).remove(); } }) $("LINK[href*='style-49037e4d27.css']").remove(); $("LINK[href*='markdown_views-d7a94ec6ab.css']").remove(); layui.use(['jquery', 'layer','code'], function(){ $("pre").attr("class","layui-code"); $("pre").attr("lay-title",""); $("pre").attr("lay-skin",""); layui.code(); $(".layui-code-h3 a").attr("class","copycode").html("復制代碼 ").attr("onclick","copycode(this)"); }); function copycode(target){ var id=$(target).parent().parent().attr("id"); var clipboard = new ClipboardJS("#"+id); clipboard.on('success', function(e) { e.clearSelection(); alert("復制成功") }); clipboard.on('error', function(e) { alert("復制失敗") }); } //$(".site-seo-depict").html($(".site-seo-depict").html().slice(0, -5)); </script> <link rel="stylesheet" type="text/css" href="http://specialneedsforspecialkids.com/yun/static/js/neweditor/code/styles/tomorrow-night-eighties.css"> <script src="http://specialneedsforspecialkids.com/yun/static/js/neweditor/code/highlight.pack.js" type="text/javascript"></script> <script src="http://specialneedsforspecialkids.com/yun/static/js/clipboard.js"></script> <script>hljs.initHighlightingOnLoad();</script> <script> function setcode(){ var _html=''; document.querySelectorAll('pre code').forEach((block) => { var _tmptext=$.trim($(block).text()); if(_tmptext!=''){ _html=_html+_tmptext; console.log(_html); } }); } </script> <script> function payread(){ layer.open({ type: 1, title:"付費閱讀", shadeClose: true, content: $('#payread') }); } // 舉報 function jupao_tip(){ layer.open({ type: 1, title:false, shadeClose: true, content: $('#jubao') }); } $(".getcommentlist").click(function(){ var _id=$(this).attr("dataid"); var _tid=$(this).attr("datatid"); $("#articlecommentlist"+_id).toggleClass("hide"); var flag=$("#articlecommentlist"+_id).attr("dataflag"); if(flag==1){ flag=0; }else{ flag=1; //加載評論 loadarticlecommentlist(_id,_tid); } $("#articlecommentlist"+_id).attr("dataflag",flag); }) $(".add-comment-btn").click(function(){ var _id=$(this).attr("dataid"); $(".formcomment"+_id).toggleClass("hide"); }) $(".btn-sendartcomment").click(function(){ var _aid=$(this).attr("dataid"); var _tid=$(this).attr("datatid"); var _content=$.trim($(".commenttext"+_aid).val()); if(_content==''){ alert("評論內容不能為空"); return false; } var touid=$("#btnsendcomment"+_aid).attr("touid"); if(touid==null){ touid=0; } addarticlecomment(_tid,_aid,_content,touid); }) $(".button_agree").click(function(){ var supportobj = $(this); var tid = $(this).attr("id"); $.ajax({ type: "GET", url:"http://specialneedsforspecialkids.com/yun/index.php?topic/ajaxhassupport/" + tid, cache: false, success: function(hassupport){ if (hassupport != '1'){ $.ajax({ type: "GET", cache:false, url: "http://specialneedsforspecialkids.com/yun/index.php?topic/ajaxaddsupport/" + tid, success: function(comments) { supportobj.find("span").html(comments+"人贊"); } }); }else{ alert("您已經贊過"); } } }); }); function attenquestion(_tid,_rs){ $.ajax({ //提交數據的類型 POST GET type:"POST", //提交的網址 url:"http://specialneedsforspecialkids.com/yun/favorite/topicadd.html", //提交的數據 data:{tid:_tid,rs:_rs}, //返回數據的格式 datatype: "json",//"xml", "html", "script", "json", "jsonp", "text". //在請求之前調用的函數 beforeSend:function(){}, //成功返回之后調用的函數 success:function(data){ var data=eval("("+data+")"); console.log(data) if(data.code==2000){ layer.msg(data.msg,function(){ if(data.rs==1){ //取消收藏 $(".layui-layer-tips").attr("data-tips","收藏文章"); $(".layui-layer-tips").html('<i class="fa fa-heart-o"></i>'); } if(data.rs==0){ //收藏成功 $(".layui-layer-tips").attr("data-tips","已收藏文章"); $(".layui-layer-tips").html('<i class="fa fa-heart"></i>') } }) }else{ layer.msg(data.msg) } } , //調用執行后調用的函數 complete: function(XMLHttpRequest, textStatus){ postadopt=true; }, //調用出錯執行的函數 error: function(){ //請求出錯處理 postadopt=false; } }); } </script> <footer> <div id="bzphlln" class="layui-container"> <div id="p7j7jrz" class="flex_box_zd"> <div id="7l555np" class="left-footer"> <h6><a href="http://specialneedsforspecialkids.com/"><img src="http://specialneedsforspecialkids.com/yun/static/theme/ukd//images/logo.png" alt="UCloud (優刻得科技股份有限公司)"></a></h6> <p>UCloud (優刻得科技股份有限公司)是中立、安全的云計算服務平臺,堅持中立,不涉足客戶業務領域。公司自主研發IaaS、PaaS、大數據流通平臺、AI服務平臺等一系列云計算產品,并深入了解互聯網、傳統企業在不同場景下的業務需求,提供公有云、混合云、私有云、專有云在內的綜合性行業解決方案。</p> </div> <div id="fntjp5r" class="right-footer layui-hidemd"> <ul class="flex_box_zd"> <li> <h6>UCloud與云服務</h6> <p><a href="http://specialneedsforspecialkids.com/site/about/intro/">公司介紹</a></p> <p><a >加入我們</a></p> <p><a href="http://specialneedsforspecialkids.com/site/ucan/onlineclass/">UCan線上公開課</a></p> <p><a href="http://specialneedsforspecialkids.com/site/solutions.html" >行業解決方案</a></p> <p><a href="http://specialneedsforspecialkids.com/site/pro-notice/">產品動態</a></p> </li> <li> <h6>友情鏈接</h6> <p><a >GPU算力平臺</a></p> <p><a >UCloud私有云</a></p> <p><a >SurferCloud</a></p> <p><a >工廠仿真軟件</a></p> <p><a >Pinex</a></p> <p><a >AI繪畫</a></p> </li> <li> <h6>社區欄目</h6> <p><a href="http://specialneedsforspecialkids.com/yun/column/index.html">專欄文章</a></p> <p><a href="http://specialneedsforspecialkids.com/yun/udata/">專題地圖</a></p> </li> <li> <h6>常見問題</h6> <p><a href="http://specialneedsforspecialkids.com/site/ucsafe/notice.html" >安全中心</a></p> <p><a href="http://specialneedsforspecialkids.com/site/about/news/recent/" >新聞動態</a></p> <p><a href="http://specialneedsforspecialkids.com/site/about/news/report/">媒體動態</a></p> <p><a href="http://specialneedsforspecialkids.com/site/cases.html">客戶案例</a></p> <p><a href="http://specialneedsforspecialkids.com/site/notice/">公告</a></p> </li> <li> <span><img src="https://static.ucloud.cn/7a4b6983f4b94bcb97380adc5d073865.png" alt="優刻得"></span> <p>掃掃了解更多</p></div> </div> <div id="jfx55xv" class="copyright">Copyright ? 2012-2023 UCloud 優刻得科技股份有限公司<i>|</i><a rel="nofollow" >滬公網安備 31011002000058號</a><i>|</i><a rel="nofollow" ></a> 滬ICP備12020087號-3</a><i>|</i> <script type="text/javascript" src="https://gyfk12.kuaishang.cn/bs/ks.j?cI=197688&fI=125915" charset="utf-8"></script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?290c2650b305fc9fff0dbdcafe48b59d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-DZSMXQ3P9N"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-DZSMXQ3P9N'); </script> <script> (function(){ var el = document.createElement("script"); el.src = "https://lf1-cdn-tos.bytegoofy.com/goofy/ttzz/push.js?99f50ea166557aed914eb4a66a7a70a4709cbb98a54ecb576877d99556fb4bfc3d72cd14f8a76432df3935ab77ec54f830517b3cb210f7fd334f50ccb772134a"; el.id = "ttzz"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(el, s); })(window) </script></div> </div> </footer> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://specialneedsforspecialkids.com/" title="国产xxxx99真实实拍">国产xxxx99真实实拍</a> <div class="friend-links"> <a href="http://belistarlp.com/">国产黄色在线</a> </div> </div> </footer> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body><div id="hht35" class="pl_css_ganrao" style="display: none;"><listing id="hht35"><dfn id="hht35"><output id="hht35"><sub id="hht35"></sub></output></dfn></listing><i id="hht35"></i><track id="hht35"><thead id="hht35"><big id="hht35"><dl id="hht35"></dl></big></thead></track><legend id="hht35"><dfn id="hht35"><b id="hht35"><mark id="hht35"></mark></b></dfn></legend><sup id="hht35"></sup><ol id="hht35"></ol><output id="hht35"><pre id="hht35"><strike id="hht35"><listing id="hht35"></listing></strike></pre></output><mark id="hht35"><acronym id="hht35"></acronym></mark><ol id="hht35"><label id="hht35"><nobr id="hht35"><small id="hht35"></small></nobr></label></ol><p id="hht35"><dfn id="hht35"></dfn></p><sup id="hht35"><label id="hht35"><nobr id="hht35"><small id="hht35"></small></nobr></label></sup><label id="hht35"><video id="hht35"></video></label><strike id="hht35"></strike><ol id="hht35"></ol><menuitem id="hht35"><pre id="hht35"><i id="hht35"><listing id="hht35"></listing></i></pre></menuitem><nobr id="hht35"></nobr><form id="hht35"><ins id="hht35"><form id="hht35"><p id="hht35"></p></form></ins></form><optgroup id="hht35"><output id="hht35"><span id="hht35"><strike id="hht35"></strike></span></output></optgroup><dfn id="hht35"><meter id="hht35"><span id="hht35"><strike id="hht35"></strike></span></meter></dfn><em id="hht35"><div id="hht35"></div></em><ol id="hht35"></ol><sup id="hht35"><label id="hht35"><rp id="hht35"><em id="hht35"></em></rp></label></sup><strike id="hht35"></strike><th id="hht35"></th><var id="hht35"><u id="hht35"><ins id="hht35"><address id="hht35"></address></ins></u></var><big id="hht35"><label id="hht35"><pre id="hht35"><track id="hht35"></track></pre></label></big><listing id="hht35"><dfn id="hht35"></dfn></listing><form id="hht35"></form><big id="hht35"><dl id="hht35"><strong id="hht35"><th id="hht35"></th></strong></dl></big><dl id="hht35"><pre id="hht35"></pre></dl><nobr id="hht35"></nobr><em id="hht35"></em><font id="hht35"></font><acronym id="hht35"><legend id="hht35"><th id="hht35"><u id="hht35"></u></th></legend></acronym><tt id="hht35"><big id="hht35"></big></tt><menuitem id="hht35"><span id="hht35"><i id="hht35"><strong id="hht35"></strong></i></span></menuitem><ruby id="hht35"></ruby><mark id="hht35"><form id="hht35"></form></mark><thead id="hht35"><strong id="hht35"><optgroup id="hht35"><track id="hht35"></track></optgroup></strong></thead><em id="hht35"><meter id="hht35"></meter></em><legend id="hht35"></legend><meter id="hht35"><ol id="hht35"></ol></meter><pre id="hht35"><dfn id="hht35"><tt id="hht35"><mark id="hht35"></mark></tt></dfn></pre><legend id="hht35"><var id="hht35"><u id="hht35"><rp id="hht35"></rp></u></var></legend><thead id="hht35"><label id="hht35"><strong id="hht35"><th id="hht35"></th></strong></label></thead><div id="hht35"><sup id="hht35"></sup></div><nobr id="hht35"></nobr><dfn id="hht35"><u id="hht35"></u></dfn><sub id="hht35"></sub><pre id="hht35"><dfn id="hht35"><b id="hht35"><ins id="hht35"></ins></b></dfn></pre><u id="hht35"><mark id="hht35"><acronym id="hht35"><legend id="hht35"></legend></acronym></mark></u><dfn id="hht35"><tt id="hht35"><progress id="hht35"><dl id="hht35"></dl></progress></tt></dfn><var id="hht35"><u id="hht35"></u></var><dfn id="hht35"><u id="hht35"></u></dfn><menuitem id="hht35"><pre id="hht35"><style id="hht35"><nobr id="hht35"></nobr></style></pre></menuitem><listing id="hht35"><dfn id="hht35"></dfn></listing><sup id="hht35"><label id="hht35"><video id="hht35"><small id="hht35"></small></video></label></sup><dl id="hht35"><pre id="hht35"></pre></dl><em id="hht35"><meter id="hht35"></meter></em><em id="hht35"></em><output id="hht35"></output><sub id="hht35"></sub><progress id="hht35"><acronym id="hht35"></acronym></progress><listing id="hht35"><dfn id="hht35"></dfn></listing><pre id="hht35"><style id="hht35"><nobr id="hht35"><em id="hht35"></em></nobr></style></pre><meter id="hht35"></meter><nobr id="hht35"><font id="hht35"><div id="hht35"><ol id="hht35"></ol></div></font></nobr><label id="hht35"><rp id="hht35"></rp></label><strike id="hht35"><listing id="hht35"></listing></strike><thead id="hht35"><thead id="hht35"><label id="hht35"><optgroup id="hht35"></optgroup></label></thead></thead><optgroup id="hht35"><output id="hht35"><sub id="hht35"><thead id="hht35"></thead></sub></output></optgroup><output id="hht35"><pre id="hht35"><i id="hht35"><listing id="hht35"></listing></i></pre></output><strike id="hht35"><strong id="hht35"></strong></strike><form id="hht35"><p id="hht35"><dfn id="hht35"><u id="hht35"></u></dfn></p></form><listing id="hht35"></listing><nobr id="hht35"></nobr><progress id="hht35"><acronym id="hht35"></acronym></progress><b id="hht35"><mark id="hht35"></mark></b><optgroup id="hht35"><ruby id="hht35"></ruby></optgroup><strong id="hht35"><track id="hht35"></track></strong><menuitem id="hht35"><span id="hht35"><strike id="hht35"><strong id="hht35"></strong></strike></span></menuitem><strong id="hht35"><optgroup id="hht35"><ruby id="hht35"><thead id="hht35"></thead></ruby></optgroup></strong><style id="hht35"><nobr id="hht35"></nobr></style><listing id="hht35"></listing><small id="hht35"><menuitem id="hht35"></menuitem></small><nobr id="hht35"></nobr><address id="hht35"></address><form id="hht35"></form><strong id="hht35"><optgroup id="hht35"><ruby id="hht35"><thead id="hht35"></thead></ruby></optgroup></strong><small id="hht35"><menuitem id="hht35"></menuitem></small><style id="hht35"><nobr id="hht35"><em id="hht35"><meter id="hht35"></meter></em></nobr></style><track id="hht35"><thead id="hht35"></thead></track><p id="hht35"><var id="hht35"></var></p><sup id="hht35"></sup><form id="hht35"><ins id="hht35"><address id="hht35"><legend id="hht35"></legend></address></ins></form><th id="hht35"><b id="hht35"></b></th><th id="hht35"><tt id="hht35"><big id="hht35"><acronym id="hht35"></acronym></big></tt></th><acronym id="hht35"></acronym><strong id="hht35"><track id="hht35"></track></strong><sup id="hht35"></sup><address id="hht35"></address><thead id="hht35"><strong id="hht35"><dfn id="hht35"><output id="hht35"></output></dfn></strong></thead><thead id="hht35"><label id="hht35"></label></thead><sup id="hht35"><form id="hht35"><rp id="hht35"><font id="hht35"></font></rp></form></sup><progress id="hht35"><form id="hht35"></form></progress><address id="hht35"><legend id="hht35"></legend></address><big id="hht35"></big><meter id="hht35"><pre id="hht35"></pre></meter><form id="hht35"><rp id="hht35"></rp></form><form id="hht35"><pre id="hht35"><i id="hht35"><listing id="hht35"></listing></i></pre></form><thead id="hht35"></thead><dfn id="hht35"><menuitem id="hht35"><sub id="hht35"><strike id="hht35"></strike></sub></menuitem></dfn><form id="hht35"><p id="hht35"></p></form><ol id="hht35"><style id="hht35"></style></ol><dfn id="hht35"><u id="hht35"><ins id="hht35"><address id="hht35"></address></ins></u></dfn><meter id="hht35"><pre id="hht35"></pre></meter><ins id="hht35"><form id="hht35"><p id="hht35"><var id="hht35"></var></p></form></ins><dfn id="hht35"></dfn><address id="hht35"></address><sup id="hht35"></sup><small id="hht35"></small><dfn id="hht35"></dfn><pre id="hht35"><i id="hht35"><listing id="hht35"><dfn id="hht35"></dfn></listing></i></pre><listing id="hht35"><sup id="hht35"></sup></listing><track id="hht35"><tt id="hht35"></tt></track><progress id="hht35"><acronym id="hht35"></acronym></progress><optgroup id="hht35"><ruby id="hht35"><sub id="hht35"><thead id="hht35"></thead></sub></ruby></optgroup><small id="hht35"><menuitem id="hht35"></menuitem></small><mark id="hht35"><form id="hht35"><p id="hht35"><var id="hht35"></var></p></form></mark><ruby id="hht35"><thead id="hht35"></thead></ruby><div id="hht35"></div><meter id="hht35"><pre id="hht35"></pre></meter><em id="hht35"></em><form id="hht35"></form><output id="hht35"><sub id="hht35"></sub></output><strike id="hht35"><listing id="hht35"><dfn id="hht35"><ruby id="hht35"></ruby></dfn></listing></strike><sup id="hht35"><label id="hht35"><rp id="hht35"><font id="hht35"></font></rp></label></sup><thead id="hht35"><thead id="hht35"></thead></thead><sub id="hht35"></sub><ins id="hht35"><form id="hht35"><p id="hht35"><var id="hht35"></var></p></form></ins><pre id="hht35"><style id="hht35"></style></pre><optgroup id="hht35"><ruby id="hht35"></ruby></optgroup><strong id="hht35"><dfn id="hht35"><output id="hht35"><sub id="hht35"></sub></output></dfn></strong><style id="hht35"><nobr id="hht35"></nobr></style><optgroup id="hht35"><ruby id="hht35"><thead id="hht35"><big id="hht35"></big></thead></ruby></optgroup><var id="hht35"><form id="hht35"></form></var><sup id="hht35"><form id="hht35"><video id="hht35"><font id="hht35"></font></video></form></sup><thead id="hht35"><strong id="hht35"><optgroup id="hht35"><ruby id="hht35"></ruby></optgroup></strong></thead><sub id="hht35"><thead id="hht35"></thead></sub><label id="hht35"><optgroup id="hht35"><ruby id="hht35"><thead id="hht35"></thead></ruby></optgroup></label></div> <script src="http://specialneedsforspecialkids.com/yun/static/theme/ukd/js/common.js"></script> <<script type="text/javascript"> $(".site-seo-depict *,.site-content-answer-body *,.site-body-depict *").css("max-width","100%"); </script> </html>