第一章 1.6 HTML5 的新功能(二)

1.6.4 ?使用 Selectors API 簡化選取操作

除了語義化元素外,HTML5 還引入了一種用于查找頁面 DOM 元素的快捷方式。 1-3 列出表了在 HTML5 出現之前,用來在頁面中查找特定元素的函數。

函數描述示例
getElementById()根據指定的id特性值查找并返回元素<div id=”foo”>
getElementById(“foo”);
getElementsByName()返回所有name特性為指定值的元素<input type=”text” name=”foo”>
getElementsByName(“foo”);
getElementsByTagName()返回所有標簽名稱與指定值相匹配的元素<input type=”text”>
getElementsByTagName(“input”)

有了新的 Selectors API 之后,可以用更精確的方式來指定希望獲取的元素,而不必再用標準DOM 的方式循環遍歷。Selectors API 與現在 CSS 中使用的選擇規則一樣,通過它我們可以查找頁面中的一個或多個元素。例如,CSS 已經可以基于嵌套(nesting)、兄弟節點(sibling)和子模式(child pattern)進行元素選擇。CSS 的最新版除添加了更多對偽類(pseudo-classe)的支持(例如判斷一個對象是否被啟用、禁用或者被選擇等),還支持對屬性和層次的隨意組合疊加。使用表 1-4 中的函數就能按照 CSS 規則來選取 DOM 中的元素。

函數描述示例結果
querySelector()根據指定的選擇規則,返回在頁面中找到的第一個匹配元素querySelector(“input.error”);返回第一個CSS類名為
querySelectorAll根據指定規則返回頁面中所有相匹配的元素querySelectorAll(“#results td”);返回id值為results的元素下所有的單元格

可以為 Selectors API 函數同時指定多個選擇規則,例如:
// 選擇文檔中類名為 highClass 或 lowClass 的第一個元素

var x = document.querySelector(“.highClass”, “.lowClass”);對 于 querySelector() 來 說 , 選 擇 的 是 滿 足 規 則 中 任 意 條 件 的 第 一 個 元 素 。 對 于querySelector- All()來說,頁面中的元素只要滿足規則中的任何一個條件,都會被返回。多條規則是用逗號分隔的。以前在頁面上跟蹤用戶操作很困難,但新的 Selectors API 提供了更為便捷的方法。比如,頁面上有一個表格,我們想獲取鼠標當前在哪個單元格上。從代碼清單 1-3 中可以看到使用 SelectorsAPI 實現有多簡單。這份源代碼也可以從 code/intro 路徑下找到。

代碼清單 1-3 使用 Selector API?

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title>Query Selector Demo</title><style type="text/css">td { border-style: solid; border-width: 1px; font-size: 300%; }td:hover { background-color: cyan; }#hoverResult { color: green; font-size: 200%; }</style></head><body><section> <!-- create a table with a 3 by 3 cell display --><table><tr><td>A1</td><td>A2</td><td>A3</td></tr><tr><td>B1</td><td>B2</td><td>B3</td></tr><tr><td>C1</td><td>C2</td><td>C3</td></tr></table><div>Focus the button, hover over the table cells, and hit Enter to identify themusing querySelector('td:hover').</div><button type="button" id="findHover" autofocus>Find 'td:hover' target</button><div id="hoverResult"></div><script type="text/javascript">document.getElementById("findHover").onclick = function() {// 找到鼠標當前懸停的單元格var hovered = document.querySelector("td:hover");if (hovered)document.getElementById("hoverResult").innerHTML = hovered.innerHTML;}</script> 
</section>
</body>
</html>

從以上示例可以看到,僅用一行代碼即可找到用戶鼠標下面的元素:

var hovered = document.querySelector(“td:hover”);

提示 Selectors API不僅僅只是方便,在遍歷DOM的時候,Selectors API通常會比以前的子節點搜索API更快。為了實現快速樣式表,瀏覽器對選擇器匹配進行了高

不難理解為什么 W3C 中的 Selectors API 標準規范會從 CSS 規范中單獨分離出來,從上面的代碼也可以看出來,Selectors API 在樣式應用以外同樣大有作為。雖然本書不會深入講解 SelectorsAPI 的全部細節,但是對于希望優化 DOM 操作方式的 Web 開發人員來說,建議使用新的 SelectorsAPI 以便快速查詢應用架構。度優化。

1.6.5?JavaScript 日志和調試

JavaScript 日志和瀏覽器內調試從技術上講雖然不屬于 HTML5 的功能,但在過去的幾年里,相關工具的發展出現了質的飛躍。第一個可以用來分析 Web 頁面及其所運行腳本的強大工具是一款名為 Firebug 的 Firefox 插件。

現在,相同的功能在其他瀏覽器的內嵌開發工具中也可以找到:Safari 的 Web Inspector、Google 的 Chrome 開發者工具(Developer Tools) IE 的開發者工具、(Developer Tools) 以及 Opera,的 Dragonfly。圖 1-3 是 Google 的 Chrome 開發者工具截圖,顯示了大量與當前 Web 頁面相關的信息(使用快捷鍵 Ctrl+Shift+J 可以看到),包括調試控制臺、資源視圖、存儲視圖等。

很多調試工具支持設置斷點來暫停代碼執行、分析程序狀態以及查看變量的當前值。

console.log API 已經成為 JavaScript 開發人員記錄日志的事實標準。為了便于開發人員查看記錄到控制臺的信息,很多瀏覽器提供了分欄窗格的視圖。console.log API 要比 alert()好用很多,因為它不會阻塞腳本的執行。

1.6.6window.JSON

JSON 是一種相對來說比較新并且正在日益流行的數據交換格式。作為 JavsScript 語法的一個子集,它將數據表示為對象字面量。由于其語法簡單和在 JavaScript 編程中與生俱來的兼容性,JSON 變成了 HTML5 應用內部數據交換的事實標準。典型的 JSON API 包含兩個函數,parse()和 stringify()(分別用于將字符串序列化成 DOM 對象和將 DOM 對象轉換成字符串)。

如果在舊的瀏覽器中使用 JSON,需要 JavaScript 庫(有些可以從http://json.org 找到)。在JavaScript中執行解析和序列化效率往往不高,所以為了提高執行速度,現在新的瀏覽器原生擴展了對 JSON 的支持,可以直接通過 JavaScript 來調用 JSON 了。這種本地化的 JSON 對象被納入了ECMAScript 5 標準,成為了下一代 JavaScript 語言的一部分。它也是 ECMAScript 5 標準中首批被瀏覽器支持的功能之一。所有新的瀏覽器都支持 window.JSON,將來 JSON 必將大量應用于HTML5 應用中。

1.6.7DOM Level 3

事件處理是目前 Web 應用開發中最令人頭疼的部分之一。除了 IE 以外,絕大多數瀏覽器都支持處理事件和元素的標準 API。早期 IE 實現的是與最終標準不同的事件模型, IE9 將會支持而DOM Level 2 和 DOM Level 3 的特性。如此,在所有支持 HTML5 的瀏覽器中,我們終于可以使

用相同的代碼來實現 DOM 操作和事件處理了,包括非常重要的 addEventListener()和dispatchEvent()方法。

1.6.8 Monkeys、Squirrelfish 和其他 JavaScript 引擎

最新一輪的瀏覽器創新不僅僅是增加了新的標簽和 API。最重要的變化之一是主流瀏覽器中JavaScript/ECMAScript 引擎飛快的升級。新的 API 提供了很多上一代瀏覽器無法實現的功能,因而腳本引擎整體執行效率的提升,不論對現有的,還是使用了最新 HTML5 特性的 Web 應用都有好處。還記得瀏覽器在顯示復雜圖像、處理數據或者編輯長篇文章時,明顯變得遲鈍的情景嗎?再好好想一想。

最近幾年,瀏覽器廠商爭相比拼,看誰能開發出更快的 JavaScript 引擎。過去的 JavaScript

純粹是被解釋執行,而最新的引擎則直接將腳本編譯成原生機器代碼,相比 2005 年前后的瀏覽器,速度的提升已經不在一個數量級上了。

大約從 2006 年 Adobe 將其 JIT 編譯引擎和代號為 Tamarin 的 ECMAScript 虛擬機捐贈給Mozilla 基金會開始,競爭的序幕就拉開了。盡管新版的 Mozilla 中 Tamarin 技術已經所剩無幾,但 Tamarin 的捐贈促進了各家瀏覽器對新腳本引擎的研發,而這些引擎的名字就如同他們聲稱的性能一樣有意思。

轉載于:https://www.cnblogs.com/bjmumu/p/3924065.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375679.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mercurial hg web server的配置

在windows下安裝tortoisehg-1.0.3-hg-1.5.3-x64.exe的版本控制工具后&#xff0c;克隆建立中心庫后&#xff0c;啟動web server&#xff0c;其他分庫可以連接中心庫進行pull但無法push。 這個可能是tortoisehg工具的問題&#xff0c;需要手工在.hg/hgrc文件中加入以下內容才可以…

dorado開發模式下實現動態查詢

使用dorado開發模式,我們可以實現以下開發技巧 開發技巧1.實現動態查詢功能: 1. 查詢按鈕的onClick事件中寫入: datasetEmployee.parameters().setValue(“employee_id”, editor_employee_id.value); datasetEmployee.parameters().setValue(“employee_name”, editor_employ…

港澳通行證辦理手續

港澳通行證辦理手續&#xff1a; 一、辦理前準備 1、 戶口本 原件復印件。 2、 身份證 (一張紙&#xff0c;正反面)原件復印件。 3、 兩張兩寸白底免冠照片。 二、辦理地點 1、戶口所在地公安局 出入境管理處&#xff08;科&#xff09;。 三、辦理時 1、排隊、填寫 【往來港澳…

undefined reference to `cv::VideoCapture::VideoCapture()'

缺少庫&#xff0c;添加相應庫就行&#xff0c;我的Qt Create中做的是&#xff1a; LIBS -L/home/mima111/opencv345/lib -lopencv_imgcodecs -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_videoio 實際上添加-lopencv_videoio就行

HDU2602 (0-1背包)

Bone Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 39259 Accepted Submission(s): 16261 Problem DescriptionMany years ago , in Teddy’s hometown there was a man who was called “Bone Col…

博客3萬訪問量了……

博客有3萬訪問量了呢。自從第一次用了贈送的1500的流量券&#xff0c;粉絲了從零突破了&#xff0c;到現在有150個粉絲了。 之前預想的寫博客的初衷&#xff0c;也是記錄自己的學習過程&#xff0c;畢竟好記憶不如爛筆頭&#xff0c;記錄下來就是長長久久的&#xff0c;隨時可以…

Mint17 一些安裝備忘

1&#xff0c;中文輸入法&#xff1a; sudo apt-add-repository ppa:fcitx-team/dailybuild-fcitx-master sudo apt-get update sudo apt-get upgrade sudo apt-get remove ^ibus* sudo apt-get remove ^fcitx* sudo apt-get install fcitx fcitx-bin fcitx-config-common fcit…

error: ‘CV_BGR2RGB’ was not declared in this scope

缺少庫&#xff0c;添加相應庫就行&#xff0c;ubuntu中Qt Create設置如下 LIBS -L/home/mima111/opencv345/lib -lopencv_imgcodecs -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_videoio 實際只要添加-lopencv_imgproc就行&#xff0c;CV_BGR2RGB變量存儲在該…

Struts學習之手動驗證

* 首先要從頁面中獲取對應的標簽name屬性的值&#xff0c;在動作類action中聲明同名的屬性&#xff0c;提供get和set方法 * 要繼承ActionSupport類或者實現Validateable接口 * 重寫Validateable接口的validate()方法 * 前提是&#xff1a;要保證setUsername()、va…

《啟示錄-打造用戶喜愛的產品》讀書小結

2014年大學畢業和研究生入學之間的暑假&#xff0c;我讀完了這本書。該書主要內容為介紹產品經理的一些工作經驗。分三方面內容系統介紹&#xff1a;人員、流程和產品。第一遍讀后&#xff0c;了解了一些產品經理的工作內容&#xff0c;也學習了很多優秀產品經理的理念。轉載于…

循環多少次?

循環多少次&#xff1f; Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 17 Accepted Submission(s) : 12 Problem Description我們知道&#xff0c;在編程中&#xff0c;我們時常需要考慮到時間復雜度&#xff0…

關于數據庫表的“記錄”與“字段”

何謂表的記錄&#xff1a; 就是數據庫中的一張表中的隨便任意一行稱之為記錄 何謂表的字段&#xff1a; 就是數據庫中的一張表中的隨便任意一列稱之為字段轉載于:https://www.cnblogs.com/cyh2009/p/4706021.html

error: use of deleted function

本文案例僅供參考 出錯的代碼如下&#xff1a; TEST(Test, test1) {TestImpl impl TestImpl(para1, para2);ASSERT_EQ("jkj", impl.func("22", "33", "44")); }實際應該這樣&#xff1a; TEST(Test, test1) {TestImpl impl(para1, …

WPF PasswordBox不支持綁定解決方法

PasswordBox的Password屬性因為安全原因不支持直接綁定&#xff0c;可以使用依賴屬性實現。直接插入代碼 public class PasswordBoxHelper{public static readonly DependencyProperty PasswordProperty DependencyProperty.RegisterAttached("Password",typeof(stri…

error: expected unqualified-id before 'public'

Error Coding class A{ }&#xff1b;class B public : A { };Correct Coding class A{ };class B : public A{ };

C# 方法返回值的個數

方法返回值類型總的來說分為值類型&#xff0c;引用類型,Void 有些方法顯示的標出返回值 public int Add(int a,int b) {return ab; } 有些方法隱式的返回返回值&#xff0c;我們可以將上面的方法改改&#xff1a; public void Add(int a,int b,out int sum) {sumab; } 怎么樣&…

【Java】Java里String 的equals和==

Java里面有對象和對象的引用的概念&#xff0c;在String方面&#xff0c;比較的是引用&#xff0c;equals比較的是對象的具體值。 String s1 new String("abc");String s2 new String("abc");System.out.println(s1 s2);System.out.println(s1.equals(s…

marked override, but does not override

檢查這個函數對應的基類函數 看是否是虛函數看函數參數是否對應

STL中的lower_bound和upper_bound的理解

STL迭代器表述范圍的時候&#xff0c;習慣用[a, b)&#xff0c;所以lower_bound表示的是第一個不小于給定元素的位置 upper_bound表示的是第一個大于給定元素的位置。 譬如&#xff0c;值val在容器內的時候&#xff0c;從lower_bound到 upper_bound表示的就是整個容器中與val相…

because the following virtual functions are pure within

構建了包含純虛函數的對象 包含純虛函數的類不能實例化為對象