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

資訊專欄INFORMATION COLUMN

《JavaScript 闖關記》之 DOM(上)

mzlogin / 900人閱讀

摘要:節點之間的關系構成了層次,而所有頁面標記則表現為一個以特定節點為根節點的樹形結構。此外,包含在列表中的每個節點相互之間都是同胞節點。在瀏覽器中,對象是繼承自類型的一個實例,表示整個頁面。

DOM(文檔對象模型)是針對 HTML 和 XML 文檔的一個 API。DOM 描繪了一個層次化的節點樹,允許開發人員添加、移除和修改頁面的某一部分。

節點層次

DOM 可以將任何 HTML 或 XML 文檔描繪成一個由多層節點構成的結構。節點分為幾種不同的類型,每種類型分別表示文檔中不同的信息及(或)標記。每個節點都擁有各自的特點、數據和方法,另外也與其他節點存在某種關系。節點之間的關系構成了層次,而所有頁面標記則表現為一個以特定節點為根節點的樹形結構。以下面的 HTML 為例:


    
        Sample Page
    
    
        

Hello World!

可以將這個簡單的 HTML 文檔表示為一個層次結構,如圖下圖所示。

在這個例子中,文檔元素是文檔的最外層元素,文檔中的其他所有元素都包含在文檔元素中。每個文檔只能有一個文檔元素。

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

Node 類型

DOM1 級定義了一個 Node 接口,該接口將由 DOM 中的所有節點類型實現。這個 Node 接口在 JavaScript 中是作為 Node 類型實現的;除了 IE 之外,在其他所有瀏覽器中都可以訪問到這個類型。JavaScript 中的所有節點類型都繼承自 Node 類型,因此所有節點類型都共享著相同的基本屬性和方法。

每個節點都有一個 nodeType 屬性,用于表明節點的類型。節點類型由在 Node 類型中定義的下列12個數值常量來表示,任何節點類型必居其一:

Node.ELEMENT_NODE(1);

Node.ATTRIBUTE_NODE(2);

Node.TEXT_NODE(3);

Node.CDATA_SECTION_NODE(4);

Node.ENTITY_REFERENCE_NODE(5);

Node.ENTITY_NODE(6);

Node.PROCESSING_INSTRUCTION_NODE(7);

Node.COMMENT_NODE(8);

Node.DOCUMENT_NODE(9);

Node.DOCUMENT_TYPE_NODE(10);

Node.DOCUMENT_FRAGMENT_NODE(11);

Node.NOTATION_NODE(12)。

通過比較上面這些常量,可以很容易地確定節點的類型,例如:

if (someNode.nodeType == Node.ELEMENT_NODE){   // 在IE中無效
    console.log("Node is an element.");
}

這個例子比較了 someNode.nodeTypeNode.ELEMENT_NODE 常量。如果二者相等,則意味著 someNode 確實是一個元素。然而,由于 IE 沒有公開 Node 類型的構造函數,因此上面的代碼在 IE 中會導致錯誤。為了確保跨瀏覽器兼容,最好還是將 nodeType 屬性與數字值進行比較,如下所示:

if (someNode.nodeType == 1){    // 適用于所有瀏覽器
    console.log("Node is an element.");
}

并不是所有節點類型都受到 Web 瀏覽器的支持。開發人員最常用的就是元素和文本節點。

Node 屬性概述

Node 常用屬性主要有以下10個,接下來我們會著重講解部分屬性。

nodeType:顯示節點的類型

nodeName:顯示節點的名稱

nodeValue:顯示節點的值

attributes:獲取一個屬性節點

firstChild:表示某一節點的第一個節點

lastChild:表示某一節點的最后一個子節點

childNodes:表示所在節點的所有子節點

parentNode:表示所在節點的父節點

nextSibling:緊挨著當前節點的下一個節點

previousSibling:緊挨著當前節點的上一個節點

nodeNamenodeValue 屬性

要了解節點的具體信息,可以使用 nodeNamenodeValue 這兩個屬性。這兩個屬性的值完全取決于節點的類型。在使用這兩個值以前,最好是像下面這樣先檢測一下節點的類型。

if (someNode.nodeType == 1){
    value = someNode.nodeName;    // nodeName的值是元素的標簽名
}

在這個例子中,首先檢查節點類型,看它是不是一個元素。如果是,則取得并保存 nodeName 的值。對于元素節點,nodeName 中保存的始終都是元素的標簽名,而 nodeValue 的值則始終為 null

節點關系

文檔中所有的節點之間都存在這樣或那樣的關系。節點間的各種關系可以用傳統的家族關系來描述,相當于把文檔樹比喻成家譜。

每個節點都有一個 childNodes 屬性,其中保存著一個 NodeList 對象。NodeList 是一種類數組對象,用于保存一組有序的節點,可以通過位置來訪問這些節點。請注意,雖然可以通過方括號語法來訪問 NodeList 的值,而且這個對象也有 length 屬性,但它并不是 Array 的實例。NodeList 對象的獨特之處在于,它實際上是基于 DOM 結構動態執行查詢的結果,因此 DOM 結構的變化能夠自動反映在 NodeList 對象中。

下面的例子展示了如何訪問保存在 NodeList 中的節點——可以通過方括號,也可以使用 item() 方法。

var firstChild = someNode.childNodes[0];
var secondChild = someNode.childNodes.item(1);
var count = someNode.childNodes.length;

無論使用方括號還是使用 item() 方法都沒有問題,但使用方括號語法看起來與訪問數組相似,因此頗受一些開發人員的青睞。另外,要注意 length 屬性表示的是訪問 NodeList 的那一刻,其中包含的節點數量。

每個節點都有一個 parentNode 屬性,該屬性指向文檔樹中的父節點。包含在 childNodes 列表中的所有節點都具有相同的父節點,因此它們的 parentNode 屬性都指向同一個節點。此外,包含在 childNodes 列表中的每個節點相互之間都是同胞節點。通過使用列表中每個節點的 previousSiblingnextSibling 屬性,可以訪問同一列表中的其他節點。列表中第一個節點的 previousSibling 屬性值為 null,而列表中最后一個節點的 nextSibling 屬性的值同樣也為 null,如下面的例子所示:

if (someNode.nextSibling === null){
    console.log("Last node in the parent’s childNodes list.");
} else if (someNode.previousSibling === null){
    console.log("First node in the parent’s childNodes list.");
}

當然,如果列表中只有一個節點,那么該節點的 nextSiblingpreviousSibling 都為 null

父節點與其第一個和最后一個子節點之間也存在特殊關系。父節點的 firstChildlastChild 屬性分別指向其 childNodes 列表中的第一個和最后一個節點。其中,someNode.firstChild 的值始終等于 someNode.childNodes[0],而 someNode.lastChild 的值始終等于 someNode.childNodes [someNode.childNodes.length-1]。在只有一個子節點的情況下, firstChildlastChild 指向同一個節點。如果沒有子節點,那么 firstChildlastChild 的值均為 null。明確這些關系能夠對我們查找和訪問文檔結構中的節點提供極大的便利。下圖形象地展示了上述關系。

在反映這些關系的所有屬性當中,childNodes 屬性與其他屬性相比更方便一些,因為只須使用簡單的關系指針,就可以通過它訪問文檔樹中的任何節點。另外,hasChildNodes() 也是一個非常有用的方法,這個方法在節點包含一或多個子節點的情況下返回 true;應該說,這是比查詢 childNodes 列表的 length 屬性更簡單的方法。

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

操作節點

因為關系指針都是只讀的,所以 DOM 提供了一些操作節點的方法。其中,最常用的方法是 appendChild(),用于向 childNodes 列表的末尾添加一個節點。添加節點后,childNodes 的新增節點、父節點及以前的最后一個子節點的關系指針都會相應地得到更新。更新完成后,appendChild() 返回新增的節點。來看下面的例子:

var returnedNode = someNode.appendChild(newNode);
console.log(returnedNode == newNode);         // true
console.log(someNode.lastChild == newNode);   // true

如果傳入到 appendChild() 中的節點已經是文檔的一部分了,那結果就是將該節點從原來的位置轉移到新位置。即使可以將 DOM 樹看成是由一系列指針連接起來的,但任何 DOM 節點也不能同時出現在文檔中的多個位置上。因此,如果在調用 appendChild() 時傳入了父節點的第一個子節點,那么該節點就會成為父節點的最后一個子節點,如下面的例子所示。

// someNode 有多個子節點
var returnedNode = someNode.appendChild(someNode.firstChild);
console.log(returnedNode == someNode.firstChild);   // false
console.log(returnedNode == someNode.lastChild);    // true

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

// 插入后成為最后一個子節點
returnedNode = someNode.insertBefore(newNode, null);
console.log(newNode == someNode.lastChild);   // true

// 插入后成為第一個子節點
var returnedNode = someNode.insertBefore(newNode, someNode.firstChild);
console.log(returnedNode == newNode);         // true
console.log(newNode == someNode.firstChild);  // true

// 插入到最后一個子節點前面
returnedNode = someNode.insertBefore(newNode, someNode.lastChild);
console.log(newNode == someNode.childNodes[someNode.childNodes.length-2]); // true

前面介紹的 appendChild()insertBefore() 方法都只插入節點,不會移除節點。而下面要介紹的 replaceChild() 方法接受的兩個參數是:要插入的節點和要替換的節點。要替換的節點將由這個方法返回并從文檔樹中被移除,同時由要插入的節點占據其位置。來看下面的例子。

// 替換第一個子節點
var returnedNode = someNode.replaceChild(newNode, someNode.firstChild);

// 替換最后一個子節點
returnedNode = someNode.replaceChild(newNode, someNode.lastChild);

在使用 replaceChild() 插入一個節點時,該節點的所有關系指針都會從被它替換的節點復制過來。盡管從技術上講,被替換的節點仍然還在文檔中,但它在文檔中已經沒有了自己的位置。

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

// 移除第一個子節點
var formerFirstChild = someNode.removeChild(someNode.firstChild);

// 移除最后一個子節點
var formerLastChild = someNode.removeChild(someNode.lastChild);

與使用 replaceChild() 方法一樣,通過 removeChild() 移除的節點仍然為文檔所有,只不過在文檔中已經沒有了自己的位置。

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

Document 類型

JavaScript 通過 Document 類型表示文檔。在瀏覽器中,document 對象是 HTMLDocument(繼承自 Document 類型)的一個實例,表示整個 HTML 頁面。而且,document 對象是 window 對象的一個屬性,因此可以將其作為全局對象來訪問。Document 節點具有下列特征:

nodeType 的值為9;

nodeName 的值為 "#document"

nodeValue 的值為 null

parentNode 的值為 null

ownerDocument 的值為 null

其子節點可能是一個 DocumentType(最多一個)、Element(最多一個)、ProcessingInstructionComment

Document 類型可以表示 HTML 頁面或者其他基于 XML 的文檔。不過,最常見的應用還是作為 HTMLDocument 實例的 document 對象。通過這個文檔對象,不僅可以取得與頁面有關的信息,而且還能操作頁面的外觀及其底層結構。

文檔的子節點

雖然 DOM 標準規定 Document 節點的子節點可以是DocumentTypeElementProcessingInstructionComment,但還有兩個內置的訪問其子節點的快捷方式。第一個就是documentElement 屬性,該屬性始終指向 HTML 頁面中的 html 元素。另一個就是通過 childNodes 列表訪問文檔元素,但通過 documentElement 屬性則能更快捷、更直接地訪問該元素。以下面這個簡單的頁面為例。


    
    

這個頁面在經過瀏覽器解析后,其文檔中只包含一個子節點,即 html 元素。可以通過 documentElementchildNodes 列表來訪問這個元素,如下所示。

var html = document.documentElement;      // 取得對的引用
console.log(html === document.childNodes[0]);   // true
console.log(html === document.firstChild);      // true

這個例子說明,documentElementfirstChildchildNodes[0] 的值相同,都指向 元素。

作為 HTMLDocument 的實例,document 對象還有一個 body 屬性,直接指向 元素。因為開發人員經常要使用這個元素,所以 document.body 在 JavaScript 代碼中出現的頻率非常高,其用法如下。

var body = document.body;    // 取得對的引用

所有瀏覽器都支持 document.documentElementdocument.body 屬性。

Document 另一個可能的子節點是 DocumentType。通常將 標簽看成一個與文檔其他部分不同的實體,可以通過 doctype 屬性(在瀏覽器中是 document.doctype )來訪問它的信息。

var doctype = document.doctype;     // 取得對的引用

瀏覽器對 document.doctype 的支持差別很大,可以給出如下總結。

IE8 及之前版本:如果存在文檔類型聲明,會將其錯誤地解釋為一個注釋并把它當作 Comment 節點;而 document.doctype 的值始終為 null

IE9+ 及 Firefox:如果存在文檔類型聲明,則將其作為文檔的第一個子節點;document.doctype 是一個 DocumentType 節點,也可以通過 document.firstChilddocument.childNodes[0] 訪問同一個節點。

Safari、Chrome 和 Opera:如果存在文檔類型聲明,則將其解析,但不作為文檔的子節點。document.doctype 是一個 DocumentType 節點,但該節點不會出現在 document.childNodes 中。

由于瀏覽器對 document.doctype 的支持不一致,因此這個屬性的用處很有限。

文檔信息

作為 HTMLDocument 的一個實例,document 對象還有一些標準的 Document 對象所沒有的屬性。這些屬性提供了 document 對象所表現的網頁的一些信息。其中第一個屬性就是 title,包含著 </b> 元素中的文本——顯示在瀏覽器窗口的標題欄或標簽頁上。通過這個屬性可以取得當前頁面的標題,也可以修改當前頁面的標題并反映在瀏覽器的標題欄中。</p> <pre>// 取得文檔標題 var originalTitle = document.title; // 設置文檔標題 document.title = "New page title";</pre> <p>接下來要介紹的3個屬性都與對網頁的請求有關,它們是 <b>URL</b>、<b>domain</b> 和 <b>referrer</b>。<b>URL</b> 屬性中包含頁面完整的 URL(即地址欄中顯示的URL),<b>domain</b> 屬性中只包含頁面的域名,而 <b>referrer</b> 屬性中則保存著鏈接到當前頁面的那個頁面的 URL。在沒有來源頁面的情況下,<b>referrer</b> 屬性中可能會包含空字符串。所有這些信息都存在于請求的 HTTP 頭部,只不過是通過這些屬性讓我們能夠在 JavaScrip 中訪問它們而已,如下面的例子所示。</p> <pre>// 取得完整的URL var url = document.URL; // 取得域名 var domain = document.domain; // 取得來源頁面的URL var referrer = document.referrer;</pre> <b>查找元素</b> <p>說到最常見的 DOM 應用,恐怕就要數取得特定的某個或某組元素的引用,然后再執行一些操作了。取得元素的操作可以使用 <b>document</b> 對象的幾個方法來完成。其中,<b>Document</b> 類型為此提供了兩個方法:<b>getElementById()</b> 和 <b>getElementsByTagName()</b>。</p> <p>第一個方法,<b>getElementById()</b>,接收一個參數:要取得的元素的 ID。如果找到相應的元素則返回該元素,如果不存在帶有相應 ID 的元素,則返回 <b>null</b>。注意,這里的 ID 必須與頁面中元素的 <b>id</b> 特性(attribute)嚴格匹配,包括大小寫。以下面的元素為例。</p> <pre><div class="h1bhxn5" id="myDiv">Some text</div></pre> <p>可以使用下面的代碼取得這個元素:</p> <pre>var div = document.getElementById("myDiv"); // 取得<div>元素的引用</pre> <p>但是,下面的代碼在除 IE7 及更早版本之外的所有瀏覽器中都將返回 <b>null</b>。</p> <pre>var div = document.getElementById("mydiv"); // 無效的ID(在IE7及更早版本中可以)</pre> <p>IE8 及較低版本不區分 ID 的大小寫,因此 <b>"myDiv"</b> 和 <b>"mydiv"</b> 會被當作相同的元素 ID。如果頁面中多個元素的ID值相同,<b>getElementById()</b> 只返回文檔中第一次出現的元素。</p> <p>另一個常用于取得元素引用的方法是 <b>getElementsByTagName()</b>。這個方法接受一個參數,即要取得元素的標簽名,而返回的是包含零或多個元素的 <b>NodeList</b>。在HTML文檔中,這個方法會返回一個<b>HTMLCollection</b> 對象,作為一個“動態”集合,該對象與 <b>NodeList</b>非常類似。例如,下列代碼會取得頁面中所有的 <b><img></b> 元素,并返回一個 <b>HTMLCollection</b>。</p> <pre>var images = document.getElementsByTagName("img");</pre> <p>這行代碼會將一個 <b>HTMLCollection</b> 對象保存在 <b>images</b> 變量中。與 <b>NodeList</b> 對象類似,可以使用方括號語法或 <b>item()</b> 方法來訪問 <b>HTMLCollection</b> 對象中的項。而這個對象中元素的數量則可以通過其 <b>length</b> 屬性取得,如下面的例子所示。</p> <pre>console.log(images.length); // 輸出圖像的數量 console.log(images[0].src); // 輸出第一個圖像元素的src特性 console.log(images.item(0).src); // 輸出第一個圖像元素的src特性</pre> <p><b>HTMLCollection</b> 對象還有一個方法,叫做 <b>namedItem()</b>,使用這個方法可以通過元素的 <b>name</b> 特性取得集合中的項。例如,假設上面提到的頁面中包含如下 <b><img></b> 元素:</p> <pre><img src="myimage.gif" name="myImage"></pre> <p>那么就可以通過如下方式從 <b>images</b> 變量中取得這個 <b><img></b> 元素:</p> <pre>var myImage = images.namedItem("myImage");</pre> <p>在提供按索引訪問項的基礎上,<b>HTMLCollection</b> 還支持按名稱訪問項,這就為我們取得實際想要的元素提供了便利。而且,對命名的項也可以使用方括號語法來訪問,如下所示:</p> <pre>var myImage = images["myImage"];</pre> <p>對 <b>HTMLCollection</b> 而言,我們可以向方括號中傳入數值或字符串形式的索引值。在后臺,對數值索引就會調用 <b>item()</b>,而對字符串索引就會調用 <b>namedItem()</b>。</p> <p>要想取得文檔中的所有元素,可以向 <b>getElementsByTagName()</b> 中傳入 <b>"*"</b>。在 JavaScript 及 CSS 中,星號(<b>*</b>)通常表示“全部”。下面看一個例子。</p> <pre>var allElements = document.getElementsByTagName("*");</pre> <p>僅此一行代碼返回的 <b>HTMLCollection</b> 中,就包含了整個頁面中的所有元素——按照它們出現的先后順序。換句話說,第一項是 <b><html></b> 元素,第二項是 <b><head></b> 元素,以此類推。由于 IE 將注釋(<b>Comment</b>)實現為元素(<b>Element</b>),因此在IE中調用 <b>getElementsByTagName("*")</b> 將會返回所有注釋節點。</p> <p>第三個方法,也是只有 <b>HTMLDocument</b> 類型才有的方法,是 <b>getElementsByName()</b>。顧名思義,這個方法會返回帶有給定 <b>name</b> 特性的所有元素。最常使用 <b>getElementsByName()</b> 方法的情況是取得單選按鈕;為了確保發送給瀏覽器的值正確無誤,所有單選按鈕必須具有相同的 <b>name</b> 特性,如下面的例子所示。</p> <pre><fieldset> <legend>Which color do you prefer?</legend> <ul> <li><input type="radio" value="red" name="color" id="colorRed"> <label for="colorRed">Red</label></li> <li><input type="radio" value="green" name="color" id="colorGreen"> <label for="colorGreen">Green</label></li> <li><input type="radio" value="blue" name="color" id="colorBlue"> <label for="colorBlue">Blue</label></li> </ul> </fieldset></pre> <p>如這個例子所示,其中所有單選按鈕的 <b>name</b> 特性值都是 <b>"color"</b>,但它們的 ID 可以不同。ID 的作用在于將 <b><label></b> 元素應用到每個單選按鈕,而 <b>name</b> 特性則用以確保三個值中只有一個被發送給瀏覽器。這樣,我們就可以使用如下代碼取得所有單選按鈕:</p> <pre>var radios = document.getElementsByName("color");</pre> <p>與 <b>getElementsByTagName()</b> 類似,<b>getElementsByName()</b> 方法也會返回一個 <b>HTMLCollectioin</b>。但是,對于這里的單選按鈕來說,<b>namedItem()</b> 方法則只會取得第一項(因為每一項的 <b>name</b> 特性都相同)。</p> <b>特殊集合</b> <p>除了屬性和方法,<b>document</b> 對象還有一些特殊的集合。這些集合都是 <b>HTMLCollection</b> 對象,為訪問文檔常用的部分提供了快捷方式,包括:</p> <p><p><b>document.anchors</b>,包含文檔中所有帶 <b>name</b> 特性的 <b><a></b> 元素;</p></p> <p><p><b>document.applets</b>,包含文檔中所有的 <b><applet></b> 元素,因為不再推薦使用 <b><applet></b> 元素,所以這個集合已經不建議使用了;</p></p> <p><p><b>document.forms</b>,包含文檔中所有的 <b><form></b> 元素,與<b>document.getElementsByTagName("form")</b>得到的結果相同;</p></p> <p><p><b>document.images</b>,包含文檔中所有的 <b><img></b> 元素,與<b>document.getElementsByTagName("img")</b>得到的結果相同;</p></p> <p><p><b>document.links</b>,包含文檔中所有帶<b>href</b>特性的 <b><a></b> 元素。</p></p> <p>這個特殊集合始終都可以通過 <b>HTMLDocument</b> 對象訪問到,而且,與 <b>HTMLCollection</b> 對象類似,集合中的項也會隨著當前文檔內容的更新而更新。</p> <b>文檔寫入</b> <p>有一個 <b>document</b> 對象的功能已經存在很多年了,那就是將輸出流寫入到網頁中的能力。這個能力體現在下列4個方法中:<b>write()</b>、<b>writeln()</b>、<b>open()</b> 和 <b>close()</b>。其中,<b>write()</b> 和 <b>writeln()</b> 方法都接受一個字符串參數,即要寫入到輸出流中的文本。<b>write()</b> 會原樣寫入,而 <b>writeln()</b> 則會在字符串的末尾添加一個換行符 <b>n</b>。在頁面被加載的過程中,可以使用這兩個方法向頁面中動態地加入內容,如下面的例子所示。</p> <pre><html> <head> <title>document.write() Example

The current date and time is:

這個例子展示了在頁面加載過程中輸出當前日期和時間的代碼。其中,日期被包含在一個 元素中,就像在 HTML 頁面中包含普通的文本一樣。這樣做會創建一個 DOM 元素,而且可以在將來訪問該元素。通過 write()writeln() 輸出的任何 HTML 代碼都將如此處理。

此外,還可以使用 write()writeln() 方法動態地包含外部資源,例如 JavaScript 文件等。在包含 JavaScript 文件時,必須注意不能像下面的例子那樣直接包含字符串 "",因為這會導致該字符串被解釋為腳本塊的結束,它后面的代碼將無法執行。



    document.write() Example 2


    ");
    

即使這個文件看起來沒錯,但字符串 "" 將被解釋為與外部的 ");

字符串 "" 不會被當作外部

在這個例子中,我們使用了 window.onload 事件處理程序,等到頁面完全加載之后延遲執行函數。函數執行之后,字符串 "Hello world!" 會重寫整個頁面內容。

方法 open()close() 分別用于打開和關閉網頁的輸出流。如果是在頁面加載期間使用 write()writeln() 方法,則不需要用到這兩個方法。

關卡

仔細想想,下面代碼塊會輸出什么結果呢?



aaabbbccc


aaabbbccc


aaabbbccc
更多

關注微信公眾號「劼哥舍」回復「答案」,獲取關卡詳解。
關注 https://github.com/stone0090/javascript-lessons,獲取最新動態。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80895.html

相關文章

  • JavaScript 闖關

    摘要:對象數組初始化表達式,闖關記之上文檔對象模型是針對和文檔的一個。闖關記之數組數組是值的有序集合。數組是動態的,根闖關記之語法的語法大量借鑒了及其他類語言如和的語法。 《JavaScript 闖關記》之 DOM(下) Element 類型 除了 Document 類型之外,Element 類型就要算是 Web 編程中最常用的類型了。Element 類型用于表現 XML 或 HTML 元素...

    mj 評論0 收藏0
  • JavaScript 闖關簡介

    摘要:瀏覽器只是實現的宿主環境之一,其他宿主環境包括和。年月,版發布,成為國際標準。事件定義了事件和事件處理的接口。對于已經正式納入標準的來說,盡管各瀏覽器都實現了某些眾所周知的共同特性,但其他特性還是會因瀏覽器而異。 JavaScript 是面向 Web 的編程語言,絕大多數現代網站都使用了 JavaScript,并且所有的現代 Web 瀏覽器(電腦,手機,平板)均包含了 JavaScri...

    baihe 評論0 收藏0
  • JavaScript 闖關

    摘要:本課程之所以叫做闖關記,是因為部分章節精心設計了挑戰關卡,通過提供更多的實戰機會,讓大家可以循序漸進地有目的地有挑戰地開展學習。課程結構及目錄以下目錄只是初步構想,課程結構及內容會根據實際情況隨時進行調整。 為何寫作此課程 stone 主要負責基于 Web 的企業內部管理系統的開發,雖然能夠熟練地使用 JavaScript,但隨著對 JavaScript 的理解越來越深,才發現自己尚...

    curried 評論0 收藏0
  • JavaScript 闖關垃圾回收和內存管理

    摘要:內存回收此時,局部變量就沒有存在的必要了,因此可以釋放它們的內存以供將來使用。局部變量會在它們離開執行環境時自動被解除引用,如下面這個例子所示手工解除的引用由于局部變量在函數執行完畢后就離開了其執行環境,因此無需我們顯式地去為它解除引用。 JavaScript 具有自動垃圾收集機制(GC:Garbage Collecation),也就是說,執行環境會負責管理代碼執行過程中使用的內存。而...

    Sleepy 評論0 收藏0
  • JavaScript 闖關初探

    摘要:使用元素嵌入代碼時,只需為指定屬性。需要注意的是,帶有屬性的元素不應該在其和元素之間再包含額外的代碼。在包含外部文件時,必須將屬性設置為指向相應文件的。所有元素都會按照他們在頁面中出現的先后順序依次被解析。關注,獲取最新動態。 當學習一門新的編程語言的時候,應該邊學邊做,反復演練以加深理解。因此,你需要一個 JavaScript 解釋器。幸運的是,每一個 Web 瀏覽器都包含一個 Ja...

    atinosun 評論0 收藏0
  • JavaScript 闖關 DOM(下)

    摘要:節點具有以下特征的值為的值為元素的標簽名的值為可能是或其子節點可能是或。添加的這些屬性分別對應于每個元素中都存在的下列標準特性。,有關元素的附加說明信息,一般通過工具提示條顯示出來。 Element 類型 除了 Document 類型之外,Element 類型就要算是 Web 編程中最常用的類型了。Element 類型用于表現 XML 或 HTML 元素,提供了對元素標簽名、子節點及特...

    mudiyouyou 評論0 收藏0

發表評論

0條評論

mzlogin

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<