前端(六):JavaScript面向對象之宿主對象

来源:https://www.cnblogs.com/kuaizifeng/archive/2018/07/14/9301477.html
-Advertisement-
Play Games

宿主對象即瀏覽器提供的對象,主要包括DOM對象和BOM對象。 一、DOM源起 1.SGML、XML和XHTML SGML(標準通用標記語言)是定義使用標簽來表示數據的標記語言的語法。 - 標簽由一個小於號和一個大於號之間的文本組成,如<title> - 標簽分為起始標簽和結束標簽,分別表示一個特定區 ...


  宿主對象即瀏覽器提供的對象,主要包括DOM對象和BOM對象。

一、DOM源起

  1.SGML、XML和XHTML

  SGML(標準通用標記語言)是定義使用標簽來表示數據的標記語言的語法。
    - 標簽由一個小於號和一個大於號之間的文本組成,如<title>
    - 標簽分為起始標簽和結束標簽,分別表示一個特定區域的開始和這個特定區域的結束,如<title>標題</title>
    - 特性是定義在起始標簽內的值。如<img src="pircutre.jpg">,src就是其特性
  HTML遵循SGML標記語言的語法,它是的SGML一種應用。或者說,SGML用來定義HTML的文檔類型定義(DTD)。SGML還用來編寫XML的DTD。

  XML對SGML的語法做了更細緻和嚴謹的擴展。
    - SGML的奇怪語法:
      - 某些標簽不語序出現結束標簽,如HTML中的<img>標簽,否則會出現錯誤。
      - 某些標簽的結束標簽可以不寫,如HTML中的<p>標簽。
      - 標簽可以以任何順序嵌套,如<div><span></div></span>。
      - 某些特性必須包含值,如<img src="picture.jpg">。
      - 某些特性不要求一定有值,如<td nowrap>。
      - 定義特性的兩邊有沒有加雙引號都是可以的,如<img src=picture.jpg>也是允許的。
  - XML去掉了許多SGML中的隨意語法,並且規定了新的語法:
      - 任何的起始標簽都必須有一個結束標簽。
      - 可以採用另一種簡化語法,即一個標簽同時表示起始標簽和結束標簽,即<tag />,如<br />,<hr />。
      - 標簽必須按合適的順序嵌套。就近原則書寫結束標簽。
      - 所有的特性都必須有值。
      - 所有的特性都必須在值得周圍加上雙引號。
  XML衍生出了MathML、SVG、RDF、RSS等等。同時,HTML被改進為XHML,即遵循XML語法的HTML。XHMTL被稱為嚴格模式。

  2.XML的API

  XML定義了HTML的數據排版和解析方式。根據XML語言規範,需要制定API來實現對這些數據的操作和訪問。

  DOM模型就是最為流行的針對XML的基於樹的API。它將XML解析為一顆有節點的樹模型,並使用一系列互相關聯的對象來表示XML的代碼。從而能夠指導開發增刪改查等具體API的實現。

  DOM是語言無關的API,它並不與其它語言綁定。但對於JavaScript而言,DOM被習慣理解成API集合。

  HTML DOM (文檔對象模型)

    - 當網頁被載入時,瀏覽器會創建頁面的文檔對象模型(Document Object Model)。

    - HTML DOM 模型被構造為對象的樹。通過 HTML DOM,可訪問 HTML 文檔的所有元素。

    - <html>
      <head>
        <title>...</title>
        ...
      </head>
      <body>
        <div>
          ...
        </div>
        ...
      </body>
     </html>
    - 通過可編程的文檔對象模型,JavaScript 獲得了足夠的能力來創建動態的 HTMLJavascript可以操作四個內容:元素、屬性、樣式和事件。html元素、html屬性、css樣式、事件。html元素、元素屬性、元素樣式和事件。html元素、html屬性、css樣式、事件。

    - HTML DOM 是瀏覽器對象BOM的一個屬性。

  3.DOM node介面和屬性訪問

  DOM定義了樹節點(node)的層次和其Node介面,以及這些節點的類型和其數字標號。這些常量會在選擇節點之後以屬性的方式查詢。

介面名稱
釋義
屬性訪問方式
數字表示
Element
表示起始標簽和結束標簽之間的內容。這是唯一可以同時包含特性和子節點的節點類型。
Node.ELEMENT_NODE
1
Attr
 代表一對特姓名和特性值。這個節點類型不能包含子節點。 
Node.ATTRIBUTE_NODE
2
Text
 代表XML文檔中的在其實標簽和結束標簽之間的,或者CData Seciron內的普通文本。這個節點類型不能包含子節點。 
Node.TEXT_NODE
3
CDataSection
  <![CDATA[]]>的對象表現形式。這個幾點類型僅能包含文本節點Text作為子節點。
Node.CDATA_SECTION_NODE
4
Entity
 表示在DTD中的一個實體定義,例如<!ENTITY foo "foo">。這個節點類型不能包含子節點。
Node.ENTITY_NODE
5
EntityReference
 代表一個實體引用,例如&quot;。這個節點類型不能包含子節點。
Node.ENTITY_REFERENCE_NODE
6
ProcessingInstruction
 代表一個PI。這個節點類型不能包含子節點。 
Node.PROCESSING_INSTRUCTION_NODE
7
Comment
 代表XML註釋。這個節點類型不能包含子節點。 
Node.COMMENT_NODE
8
Document
 代表在DTD中定義的記號。這個很少用到。
Node.DOCUMENT_NODE 
9
 DocumentType  最頂層的節點,所有的其它節點都是附屬於它的。  Node.DOCUMENT_TYOE_NODE  10
 DoucmentR=Frament  DTD引用(使用<!DOCTYPE>),如<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">。它不能包含子節點。  Node.DOCUMENT_FRAMENT_NODE  11
Notation
 可以像Document一樣來保存其它節點。 
Node.NOTATION_NODE
12

   4.節點特性和方法

  Node介面定義了所有節點類型都包含的特性和方法。

特性/方法  類型/返回類型  說明
 nodeName  String  節點的名字
 nodeValue  String  節點的值
 nodeType  Number  節點的類型常量值
 ownerDocument  Document  節點的所屬文檔
 childNodes
 NodeList  節點的所有子節點列表
 firstChild  Node  子節點列表的第一個節點
 lastChild  Node  子節點列表的最後一個節點
 hasChildNodes()  Boolean  是否包含子節點
 appendChild(node)  Node  將node添加到childNodes末尾
 removeChild(node)  Node  從childNodes中刪除node
 replaceChild(newnode,oldnode)  Node  將childNodes中的oldnode替換成newnode
 insertBefore(newnode, refnode)  Node  在childNodes中的refnode之前插入newnode
 previousSibling  Node  指向前一個兄弟節點,如果這個節點就是第一個兄弟節點,那麼該值為null
 nextSibling  Node  指向後一個兄弟節點,如果這個節點就是最後一個兄弟節點,那麼該值為null
 attributes  NamedNodeMap  包含了代表一個元素的特性的Attr對象,僅用於Element節點

  5.HTML DOM

  任何基於XML的語言,如XHTML和SVG,因為它們遵循XML語法,所以可以使用上述的Node介面操作。然而很多語言會繼續定義它們自己的DOM來擴展XML以提供特定功能。

  開發XML DOM的同時,W3C還一起開發了針對XHTML(以及HTML)的DOM。這個DOM定義了一個HTMLDocument一個HTMLElement作為實現基礎。

  每個HTML元素通過Ω它自己的HTMLElement類型表示,如HTMLDivElement代表了<div>元素。但有少數的除外。

二、DOM通用節點對象操作

  1.DOM的通用屬性

alinkColor
激活的鏈接的顏色,如<body alink="color">定義的。
bgColor
頁面的背景顏色,如<body bgcolor="color">定義的。
fgColor
頁面的文本顏色,如<body text="color">定義的。
lastModified
最後修改頁面的日期,是字元串。
linkColor
鏈接的顏色,如<body link="color">定義的
referrer
瀏覽器當前頁後退一個位置的url
title
<title>標簽中顯示的文本
URL
當前頁面的url
vlinkColor
訪問過的鏈接的顏色,如<body vlink="color">定義的
* 這些屬性是引用了<body>標簽中的舊HTML特性,應該用樣式表代替它們。

  2.DOM的通用集合

ahchors
頁面中所有錨的集合(由<a name="ahchorname></a>標簽表示)。
applets
頁面中所有applet的集合。
embeds
頁面中所有嵌入式對象的集合(由<embed>標簽表示)
forms
頁面中所有表單的集合。
images
頁面中所有圖像的集合。
links
頁面中所有鏈接的集合(由<a href="somewhere.htm"><a>表示。

  3.DOM通用節點操作

  document對象是BOM的一部分,同時也是HTML DOM的HTMLDocument對象的表現形式,即它也是XML DOM Document對象。

  1查找節點

document[Element].getElementById() 返回對擁有指定 id 的第一個對象的引用。
document[Element].getElementsByName() 返回帶有指定名稱的對象集合。
document[Element].getElementsByTagName() 返回帶有指定標簽名的對象集合。
document[Element].getElementsByClassName() 返回帶有指定類名的對象集合。

  2創建節點

document.createAttribute(name)
創建屬性名為name的屬性節點。
document.createElement()
創建標簽名為tagName的元素。
document.createTextNode(text)
創建包含文本text的文本節點。
* 創建其它Node介面定義的節點沒有太大用處。因為被更簡便的操作替代。

  3添加節點

Element.appendChild(Node)
添加Node子元素。
Element.insertBefore(newNode, oldNode)
在某個子節點對象前添加新節點。

 

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>節點選取</title>
    <style type="text/css">
        .outer {
            width: 200px;
            background-color: yellow;
        }
        .inner{
            float: left;
            height: 50px;
            width: 50px;
        }
        .inner:first-child{
            background-color: red;
        }
        .inner:last-child{
            background-color: blue;
        }
        .header, .bottom{
            height: 50px;
            width: 200px;
            background-color: green;
        }
        .clearfix:before, .clearfix:after{
            content: "";
            height: 0;
            line-height: 0;
            display: block;
            visibility: hidden;
            clear: both;
        }
    </style>
</head>
<body>
    <div class="header"></div>
    <div class="outer clearfix">
    </div>
    <div class="bottom"></div>
<script>

    function newDiv() {}
    newDiv.create = newDiv.prototype.create = function (className) {
        var oDiv = document.createElement("div");
        // 第一種方式
        /*
        var oText = document.createTextNode("第一個子div");
        oDiv.appendChild(oText);
        var oAttr = document.createAttribute("class");
        oAttr.nodeValue = className;
        oDiv.setAttributeNode(oAttr);
        */
        // 第二種方式
        oDiv.innerHTML = "第二個子div";
        oDiv.setAttribute("class", className);
        return oDiv;
    };
    var oDiv = new newDiv();
    var oDivFather = document.getElementsByClassName("outer")[0]
    oDivFather.appendChild(oDiv.create("inner"));
    oDivFather.appendChild(oDiv.create("inner"));
</script>
</body>
</html>
樣例代碼

  4刪除節點

  Element.removeChild(Node) 刪除Node子元素。

  5替換節點

  Element.replacChild(newNode, oldNode) 替換子元素。

  6.節點屬性和方法

  節點屬性和方法包含DOM NOde介面定義的所有屬性和方法。HTML DOM 還包括其它的一些屬性和方法。詳細參見http://www.w3school.com.cn/jsref/dom_obj_all.asp。

Element.tagName
返回元素的標簽名。
<

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先我是這樣的寫的: <label> <input type="checkbox">點擊 </label> 無論點擊input還是文字,都會執行兩次。因為點擊lable會預設執行以下input,然後input又會自己執行一下,所以執行了兩次。 解決方法: function clickIn(event ...
  • 新聞 hao123 地圖 視頻 貼吧 登錄 設置 ... ...
  • 應用table表單,編程個人簡歷表單,同時運用了跨行rowspan和跨列colspan。 ...
  • 1.1 瀏覽器的工作原理 把一些標簽解析成用戶可視化的頁面 1.2 HTML中的標簽與元素 在HTML中以<xx>開始,以</xx>結束,比如<html></html>等。 標簽和其內容統稱為元素,比如:<xx>h5</xx> 元素可以有屬性,比如 <xx src=’xxx’>h5</xx> 1.3 ...
  • 註意:老鐵些,在看這篇文章的之前,最好瞭解一下react 的全局狀態管理庫哦,不然可能會坐飛機。 ^_^ React 之reflux (它是一個功能模塊,需要安裝引入): import Reflux from 'reflux'; let action = Reflux.createAction(); ...
  • 我當時就想咋回事呢 明明函數是定義在Animation裡面的 方法也是由它調用的 所以this應該指向的是Animation呀 於是乎我就繼續往下看 看打了 奧,明白了 setTimeout 和 setInterval 一般都是這麼寫 timer=setTimeout(function(){},10 ...
  • 我們在學習es6的時候會遇到一個神奇的語法 一個括弧和一個箭頭就可以實現一個函數,有時遇到參數時只傳參數就行甚至都不用寫括弧,看似簡單其實跟我們在es5中的函數是一樣的有時會改變我們this的指向。下麵我們來看一下箭頭函數我們先來按常規語法定義函數: 該函數使用箭頭函數可以使用僅僅一行代碼搞定! 是 ...
  • 聖杯模式是Javascript中用來實現繼承的一種方法,它的簡單形式如下所示 這種聖杯模式的本質在於,中間生成了一個對象,起到了隔離的作用,今後為Son.prototype添加屬性時,全部都會加在這個對象裡面,所以不會對父級產生影響。 而向上查找是沿著__proto__查找,可以順利查找到父級的屬性 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...