成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript DOM的本質及操作方法

開發 前端
雖然現在一些JavaScript框架,諸如jQuery、Prototype和MooTools能提高我們的前端開發效率,而且很好的解決了瀏覽器兼容性問題,但我們仍要打好JavaScript技術基礎,而本文將介紹JavaScript和文檔對象模型(DOM)的本質。

雖然現在一些JavaScript框架,諸如jQuery、Prototype和MooTools能提高我們的前端開發效率,而且很好的解決了瀏覽器兼容性問題,但我們仍要打好javascript技術基礎。文章將介紹JavaScript和文檔對象模型(DOM)的本質。

51CTO推薦閱讀:減少瀏覽器重解析 JavaScript DOM操作優化方案

引言JavaScript

JavsScript是可以在各種不同環境下使用的動態的、松散類型(loosely typed)、基于原型的編程語言。除了作為流行的Web客戶端程序語言,它還可以使用于IDE插件、PDF文件或給予其它平臺甚至更為抽象的概念。

JavaScript 是由來自Netscape得Brendan Eich創造的基于ECMAScript標準(ECMA-262)的語言。他最初被命名為LiveScript,但后來被改為JavaScript,這也是很多人會把它跟java混淆的原因之一。以下是它的一些特性的詳細說明:

◆動態程序語言在運行時執行;他們并沒有編譯。正因為此,有時JavaScript被認為是一種腳本語言,而不是一個真正的編程語言(顯然是一種誤解)。

◆松散類型語言不要求強類型系統,如果你使用C或Java編程(與JavaScript不同)聲明變量時你就明白必須聲明類似’int’(整型)。JavaScript的不同之處在于你用不著指定它的類型。

◆在JavaScript中我們使用原型來實現類似繼承的效果,JavaScript不支持類。

◆JavaScript也是函數式語言,它處理函數為優先對象。它是基于lambda下的理念。

理解以上概念對于學習JavaScript這門技術關系并不是很大。只是讓大家對JavaScript有個初步正確的的認識,并了解JavaScript與其它編程語言的本質區別。

文檔對象模型

文檔對象模型(Document Object Model),通常簡稱為DOM,是網站內容與JavaScript互通的接口。自JavaScript成為最常用的語言時JavaScript和DOM通常被視為獨立的實體。DOM接口用于存取、遍歷和控制HTML和XML文檔。

下面是關于DOM的一些重要的知識:

◆Window對象作為全局對象,你僅需嘗試使用”window”來訪問它。Window對象下包含了你的所有要執行的JavaScript代碼。就像所有對象都包含屬性和方法。

◆屬性是存儲于對象下的變量。所有在網頁中創建的變量都會成為window對象的屬性。

◆方法是存儲在對象下的函數。在所有函數存儲在window對象下時,你可以使用’methods’引用它們。

◆DOM相對于Web文檔結構創建層次結構,層次有節點組成。DOM節點有很多不同的類型,其中最重要的要數’Element’、’Text’和’Document’了。

◆‘Element’節點表示在頁面中的元素,所以如果在頁面中你有一個段落元素(‘<p>’),那么你可以通過DOM的節點來訪問它。

◆‘Text’節點表示在頁面中的所有文本(在元素中),所以如果在頁面的段落中有一些文本內容,那么你可以通過DOM的節點來訪問它。

◆‘Document’節點表示整個文檔。(它是DOM樹的根節點)

◆另請注意,元素屬性是DOM節點本身。

◆不同的布局引擎對于DOM標準的執行是有一定的差別的。例如,使用Gecko布局引擎的FireFox瀏覽器可以很好的執行(但也并不是完完全全按照W3C規范那樣),但使用Trident引擎的IE因它的很多Bug和不完全執行DOM標準而為眾人所知。這便是前端開發領域的一大痛苦之處。

網頁中的JavaScriptScript元素

當你想在網站上使用JavaScript的時候,需要讓它們包含在script元素中:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">    
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="en">    
  3.    <head>    
  4.       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />    
  5.       <title>JavaScript!</title>    
  6.   </head>    
  7.   <body>    
  8.      
  9.     <script type="text/javascript">    
  10.     // <![CDATA[    
  11.            
  12.     // ]]>    
  13.     </script>    
  14.            
  15.   </body>    
  16. </html>  

正如你所見在文檔下面有script元素。其實type屬性嚴格來講應設置為”application/javascript”,但它不出所料的在IE瀏覽器下無法正常工作,所以我們使用”text/javascript”或不用type屬性,如果你在意代碼W3C規范驗證的話建議你使用前者(“text/javascript”)。

你還會注意到在script元素中我們還有一對被注釋掉的代碼行,它們告訴支持XHTML的瀏覽器script元素中的內容是字符數據而不應被解釋為XHTML標記。如果你計劃在JavaScript代碼中使用’<’或’>’字符的話那它就是相當必要的。當然,如果你是用普通HTML代碼的話,那你完全可以無視它。

defer屬性

我們script元素中的JavaScript代碼會在頁面讀過程中執行,唯一的例外就是當script元素有defer屬性的時候。默認情況下,當瀏覽器遇到script元素時,它會停下來并運行代碼,然后再繼續進行文檔解析。defer屬性告訴瀏覽器代碼包含非變更文檔代碼而且可以稍后執行。它的唯一問題就是只在IE下可用,所以我們還是要盡量不要使用它了,了解就行。

鏈接外部腳本

如果你想連接一個外部腳本文件,那么你只需為你的script元素添加一個有文件地址的src屬性。把腳本文件獨立分離出來進行調用的確相對于內聯腳本來說是個好辦法,它意味著瀏覽器可以緩存該文件,而且你都不用擔心那些CDATA之類的廢話。

  1. <script type="text/javascript" src="my-script.js"></script>  

#p#

JavaScript要點

在我們繼續講DOM之前有必要學習一下JavaScript基礎要點,如果有些東西你理解起來有些困難,別擔心,你早晚會搞定它的。在JavaScript種不同類型的值,它們是數值、字符串、布爾值、對象、Undefined 和 Null。單行注釋使用兩個斜杠(//),這行內的所有內容都將被作為注釋內容理解。多行注釋使用’/*’ 和 ‘*/’完成注釋段落。

數值

在JavaScript中所有數值都被描繪成浮點值,當定義數值變量時記得不要用引號。

  1. // 注: 要一直使用 'var' 來聲明變量:  
  2. var leftSide = 100;  
  3. var topSide = 50;  
  4. var areaOfRectangle = leftSide * topSide; // = 5000  

字符串

你定義的字符串都是有字面上來看,JavaScript不會對它進行處理。一個字符串可由一連串的Unicode字符組成,并由一對雙引號或單引號包圍。

  1. var firstPart = 'Hello';  
  2. var secondPart = 'World!';  
  3. var allOfIt = firstPart + ' ' + secondPart; // Hello World!  
  4. // +號進行字符串連接處理  
  5. // (它還可用于數學上的加法運算)  

布爾值

布爾類型在你進行條件判斷的時候很有用,以了解是否符合指定的標準。布爾有兩個可能的值:true和false。任何使用邏輯算法的比較結果都將是布爾值。

  1.  5 === (3 + 2); // = true   
  2. // 你可以給變量聲明布爾值:  
  3. var veryTired = true;  
  4. // 你可以像這樣測試:  
  5. if (veryTired) {  
  6.     // 你的代碼  
  7. }  

上面看到的’===’是比較運算符,我們將在后面討論。

函數

函數是一個專門的對象。

  1.  // 使用函數操作創建一個新函數:  
  2. function myFunctionName(arg1, arg2) {  
  3.     // 這里是函數的代碼  
  4. }  
  5.       
  6. // 如果你省略掉函數名,那么你創建的是"匿名函數":  
  7. function(arg1, arg2) {  
  8.     // 這里是函數的代碼  
  9. }  
  10.           
  11. // 執行函數僅需對他進行引用并使用圓括號 (附帶參數):  
  12. myFunctionName(); // 無參數  
  13. myFunctionName('foo', 'bar'); // 帶參數  
  14.       
  15. // 你也可以在不聲明變量的情況下執行函數  
  16.       
  17. (function(){  
  18.     // 這就是所謂的自調用匿名函數  
  19. })();  

數組

數組也是一個專門的對象,它可以包含任意數量的數據。要訪問數組中的數據你就必須使用數字,用以引用其在數組中的”索引”。

  1. // 兩種聲名數組的不同方式,  
  2. // 字面:  
  3. var fruit = ['apple', 'lemon', 'banana'];  
  4.       
  5. // 使用數組構造器:  
  6. var fruit = new Array('apple', 'lemon', 'banana');  
  7.       
  8. fruit[0]; // 訪問數組中的第一個數據項 (apple)  
  9. fruit[1]; // 訪問數組中的第二個數據項  (lemon)  
  10. fruit[2]; // 訪問數組中的第三個數據項  (banana)  

對象

對象是命名的的值的集合(鍵-值對),它和數組很相似,唯一的不同之處在于你可以為每個數據值指定名字。

  1. // 兩種聲明對象的不同方式,  
  2.       
  3. // 字面(大括號):  
  4. var profile = {  
  5.     name: 'Li',  
  6.     age: 23,  
  7.     job: 'Web Developer'  
  8. };  
  9.       
  10. // 適用對象構造器:  
  11. var profile = new Object();  
  12. profile.name = 'Li';  
  13. profile.age = 23;  
  14. profile.job = 'Web Developer';  

if/else語句

if/else語句是JavaScript中最常見的結構,它看上去就像下面這樣:

  1. var legalDrinkingAge = 21;   
  2. var yourAge = 23;  
  3.       
  4. if ( yourAge >= legalDrinkingAge ) {  
  5.      // 我們使用'alert'來通知用戶:  
  6.     alert('你可以喝水.');  
  7. } else {  
  8.     alert('對不起,你不能喝水.');  
  9. }  

循環

循環在遍歷數組中的數據項或對象的所有成員時非常有用,JavaScript中最常用的循環是for和while語句。

  1. var envatoTutSites = ['NETTUTS','PSDTUTS','AUDIOTUTS','AETUTS','VECTORTUTS'];  
  2. // WHILE循環  
  3. var counter = 0;  
  4. var lengthOfArray = envatoTutSites.length;  
  5. while (counter < lengthOfArray) {  
  6.     alert(envatoTutSites[counter]);  
  7.     counter++; // 等同于 counter += 1;  
  8. }  
  9.       
  10. // FOR循環  
  11. // (The i stands for "iterator" - you could name it anything)  
  12. for (var i = 0length = envatoTutSites.length; i < length; i++) {  
  13.     alert(envatoTutSites[i]);  
  14. }  

#p#

訪問DOM節點

假設我們有一個包含了一個段落和一個無序列表的基本XHTML文檔:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
  3.     <head> 
  4.             <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
  5.             <title>JavaScript!</title> 
  6.     </head> 
  7.     <body> 
  8.        
  9.         <p id="intro">My first paragraph...</p> 
  10.       
  11.         <ul> 
  12.             <li>List item 1</li> 
  13.             <li>List item 1</li> 
  14.             <li>List item 1</li> 
  15.             <li>List item 1</li> 
  16.             <li>List item 1</li> 
  17.         </ul> 
  18.       
  19.         <script type="text/javascript"> 
  20.         // <![CDATA[  
  21.         
  22.        // ]]> 
  23.         </script> 
  24.       
  25.     </body> 
  26. </html>  

在第一個例子中我們將使用’getElementById’這個DOM方法訪問我們的段落。

  1. var introParagraph = document.getElementById('intro');  
  2. / 我們現在訪問了一個DOM節點,這個DOM節點代表intro段落。 

變量’introParagraph’現在指向DOM節點,我們現在可以在這個節點上做很多事情,我們可以讀取它的內容和屬性,也可以控制它的任何方面。我們可以刪除它、克隆它或將它移到DOM樹的其它位置。

我們可以使用JavaScript和DOM接口訪問現在文檔中的任何東西。所以,我們可能希望用類似的方式訪問文檔中的那個無序列表,但唯一的問題就在于它并沒有ID。你可以給它一個ID屬性并使用同樣的方法訪問它或者使用’getElementsByTagName’方法訪問它。

  1.  var allUnorderedLists = document.getElementsByTagName('ul');  
  2. // 'getElementsByTagName' 返回當前存在的節點集合/列表  
  3. // 它除了那一點微小的差別外其實和數組很相似。  

getElementsByTagName

getElementsByTagName方法返回當前存在的節點集合/列表,它和數組的相似之處是它也有length屬性。需注意的重要一點是這些集合是’即時’的,如果你在DOM中添加了一個新元素那么這個集合將自動自我更新。由于它和數組類似,所以我們可以使用索引來訪問其中的每個節點,從0到這個集合的總長度(減1)。

  1. // 訪問單個無序列表: [0] index  
  2. var unorderedList = document.getElementsByTagName('ul')[0];  
  3.       
  4. // 將UL中的列表項創建為節點列表:  
  5. var allListItems = unorderedList.getElementsByTagName('li');  
  6.      
  7. // 現在我們可以使用for循環遍歷列表項:  
  8. for (var i = 0length = allListItems.length; i < length; i++) {  
  9.     // 提取其文本節點并alert它的內容:  
  10.     alert( allListItems[i].firstChild.data );  
  11. }  

遍歷DOM

術語”遍歷”就是用來描述訪問整個DOM尋找節點的行為。DOM接口為我們提供了大量的節點屬性以便我們在文檔中的所有節點自由訪問。
這些節點屬性可以方便我們訪問關聯的/挨著的節點:

Node.childNodes:你可以使用它訪問某個元素的所有直屬子元素。它將返回一個類似數組的對象,你可以循環遍歷它。數組中的節點可以包含所有不同類型的節點,如文本節點和其它類型的元素節點。

◆Node.firstChild:這個屬性等同于訪問’childNodes’數組的首項(‘Element.childNodes[0]‘)。它是個捷徑。

◆Node.lastChild:這個屬性等同于訪問’childNodes’數組的末項(‘Element.childNodes[Element.childNodes.length-1]‘)。它也是個捷徑。
 
◆Node.parentNode:這個屬性可以讓你訪問當前節點的父節點,僅會有唯一一個父節點,如果想訪問’祖父’級節點,可以使用’Node.parentNode.parentNode’,以此類推。
 
◆Node.nextSibling:這個屬性可以讓你訪問DOM樹同級下的下一個節點。

◆Node.previousSibling:這個屬性可以讓你訪問DOM樹同級下的上一個節點。

所以就想你看到的一樣,遍歷DOM就是如此簡單,只要你熟練運用了他的那些節點屬性。

列表項只能在他們之間沒有空格的情況下檢索。因為在文檔中你能得到文本節點和元素節點,而’<ul>’和’<li>’之間的空格也會被當做是一個節點(文本節點)。同樣,無序列表嚴格意義上講并不是段落的下一個兄弟節點,因為在他倆之間有空格,也就是另一個節點。通常在這種情況下,你可以遍歷’childNodes’數組并測試它們的’nodeType’,'nodeType’值為1就是元素節點,2為屬性,3為文本節點。

這就是JavaScript基本運行方式,你可以使用本地DOM方法和屬性漂亮的訪問并提取文檔中的元素。現在你可以脫離那些繁瑣的框架而獨立進行基本的DOM操作了。

【編輯推薦】

  1. 深入解讀JavaScript中BOM和DOM
  2. 詳解JavaScript DOM中的Node節點
  3. 減少瀏覽器重解析 JavaScript DOM操作優化方案 
責任編輯:王曉東 來源: 暴風彬彬的博客
相關推薦

2010-09-28 14:52:57

JavaScriptDOM

2010-08-25 14:37:38

snort入侵檢測

2017-07-19 14:26:01

前端JavaScriptDOM

2010-09-13 17:12:55

JavaScript

2009-12-15 13:59:42

Ruby對象操作

2010-02-01 09:40:08

Python操作

2011-03-29 10:16:47

Jave枚舉

2019-12-11 09:23:51

JavaScriptHTMLXML

2009-12-30 14:28:06

Silverlight

2010-03-04 09:58:32

安裝Python

2010-02-23 17:59:52

WSIT連接WCF

2009-12-31 11:35:20

Silverlight

2010-03-05 13:48:24

Python for

2009-09-18 10:58:31

C#數組操作

2009-09-15 23:21:17

Linq插入數據

2010-03-15 15:18:23

Python運行

2010-09-08 16:50:11

JavaScriptDOM操作

2009-08-18 15:49:19

C# 操作Excel

2016-04-06 11:29:58

JavaScriptDOM操作

2009-08-28 15:25:38

C#線程操作
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品一区二区三区免费视频 | 天天躁日日躁xxxxaaaa | 中文字幕一区二区不卡 | 久久国产精品免费一区二区三区 | 日韩在线播放网址 | 97视频在线观看免费 | 成人欧美一区二区三区黑人孕妇 | 亚洲精品一区二区三区在线 | 国产免费拔擦拔擦8x高清 | 欧美成人h版在线观看 | 视频一区二区在线观看 | 亚洲天堂一区二区 | 一区二区三区四区不卡 | 国产高清在线精品一区二区三区 | 亚洲人的av| 精品久久影院 | 可以在线观看av的网站 | 先锋资源网 | 国产一区二区三区四区 | 久久国内精品 | 欧美成人免费在线视频 | 黄色在线观看网站 | 久久久成人免费视频 | 中文字幕视频在线观看 | 天天影视综合 | 一区二区三区四区av | av网站免费在线观看 | 精品美女久久久 | 国内精品视频在线观看 | 精品二区| 在线观看毛片网站 | 老司机成人在线 | 欧美午夜在线 | 神马福利 | 亚洲天堂中文字幕 | 欧美a级成人淫片免费看 | 久久久精品亚洲 | 成人免费在线观看 | 国产在线精品一区二区三区 | 国产一级特黄aaa大片评分 | 国产aⅴ精品 |