国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

不只是口號 jQuery的設計藝術

開發 開發工具 前端
jQuery是一個了不起的輕量級的JavaScript框架,事實上在jQuery發布之前,就已經有無數功能強大得多的JavaScript框架在流行。jQuery的口號是“write less, do more”,但這并不是jQuery的全部設計哲學。

jQuery是一個了不起的輕量級的JavaScript框架,事實上在jQuery發布之前,就已經有無數功能強大得多的JavaScript框架在流行。從功能列表上來說,jQuery在JavaScript框架中只能算是很不起眼的小弟。

但這個小弟在短短的時間內,就成為了最流行的JavaScript框架之一。當然jQuery成功的原因有很多,跨瀏覽器兼容、輕巧、不算很差的性能,以及jQuery的“口號”:write less, do more。

51CTO推薦閱讀:jQuery四大天王:核心函數詳解

有人會說,write less, do more就是jQuery的全部設計哲學,但我不這么認為。在我看來,write less, do more是任何一個框架都必須去做的事情。很難想象會有人選擇一個write more, do less的框架吧。所以,對于一個框架而言,這是最基本的事情,要成為一個偉大的框架,顯然這很不夠。

在這里我想談談jQuery的一個設計的藝術,select then do。CSS選擇器是jQuery最重要的函數$(或者說jQuery)最常見的參數。盡管這個函數可以接受的參數還有HTML元素或是HTML代碼。但最常用的顯然是傳入一個CSS選擇器,jQuery會幫你選擇文檔中符合要求的元素。然后,你就可以對這個元素集進行操作:

  1. $("li").css("font-style", "italic"); 
  2.  

這段腳本可以將所有li元素設置為斜體。這是jQuery最常見的用法,利用選擇器選擇自己所需的元素,然后對其執行某些操作。為了方便進行多個操作,jQuery絕大多數的函數都返回執行函數的原對象,在這里也就是$("li")。所以我們可以簡單的繼續寫:

  1. $("li").css("font-style", "italic").hide();
  2.  

這里面透露出來了一個jQuery設計的哲學,即select then do,select就是選擇所需的元素,do就是執行某些操作。絕大多數時候,我們都是select.do.do.select.do.do.do,比如說:

  1. $("li").css("font-style", "italic").show().find("a").text("刪除").attr("href", "javascript:void(0);").click(function ()   
  2. { $(this).parent().hide(); }); 

很明顯的,$("li")在select然后接著兩個do,再然后.find("a"),這里在進一步進行select,然后繼續執行一系列的do。注意在click綁定的事件處理函數里:$(this).parent().hide()也是一個非常經典的select.select.do。這非常接近我們的自然語言,比如說上面那一段腳本,其實是這個意思:

“所有的li元素聽好了,把你們的字體搞成斜的,再給我顯示出來,然后看看你們后代里面有沒有a元素,讓它把顯示文字變成“刪除”,再把href屬性設置為"javascript:void(0);",最后他們被點擊的時候,把他們的父親隱藏掉。”是的,我完全是照著腳本直接就可以說出來,不需要任何思考和變換。接下來,我們來看看一個糟糕的例子:

  1. var items = document.getElementsByTagName("li" );  
  2.      for (var i = 0; i < items.length; i++)  
  3.           {  var li = items.item(i);    
  4.              li.style.fontStyle = "italic";    
  5.              li.style.display = "";     
  6.              var childs = li.childNodes;    
  7.              for (var j = 0; j < childs.length; j++)    
  8.           {    var a = childs[j];       
  9.               if (a.tagName != "A")        
  10.               continue;       
  11.                a.innerText = "刪除";      
  12.                a.href = "javascript:void(0);";       
  13.                a.onclick = function ()      
  14.            {   this.parentNode.style.display = "none";      
  15.              };    
  16.             }  

很難想象這段腳本只是完成了相同的事情。照著這段腳本你能簡單的描述它是干什么的么?

當然,select then do并不僅僅只是幫我們節省了代碼。更大的優勢在于,它使得我們可以將我們的邏輯和HTML文檔徹底的分開。簡單的說,在Web開發中,我們經常會遇到這樣的需求,按下一個按鈕,彈出一個選擇框讓用戶決定是否提交表單,傳統的方式是這樣:

  1. <input type="button" id="submitButton" value="提交" onclick="if   
  2. ( confirm( '您確定要提交這些信息么' ) )   
  3. document.getElementById('registerForm').submit();" /> 

顯然這很糟糕,他將行為和HTML元素死死的捆在了一起,如果我們希望這個按鈕同時干兩件事情,那真是一件災難。jQuery的選擇器可以很好的幫助我們分離我們的行為,select then do:

  1. $("#submitButton").click(function ()  
  2. { if (confirm('您確定要提交這些信息么'))   
  3. $('#registerForm').submit(); }); 

如果是要處理復雜的事情,這會更愜意。其實到現在并沒有什么神奇的事情發生,沒有jQuery我們也可以通過DOM提供的方法簡單的通過腳本進行事件的注冊,而不是直接寫在HTML里面。只是我們要處理一下不同的瀏覽器之間的差異而已。

#p#

我們來考慮另一個場景。譬如說在頁面上有一個登陸的小區域,里面有三個輸入框,用戶名、密碼和驗證碼,然后有一個登陸按鈕,像這樣:

  1. <form action="/login" id="loginForm">    
  2.      <table border="0" cellpadding="5" cellspacing="0">      
  3.            <tr>        
  4.                <td>用戶名:</td>        
  5.                <td><input type="text" name="username" style="width: 100px;" /></td>      
  6.                </tr>      
  7.                <tr>        
  8.                <td>密碼:</td>        
  9.                <td><input type="password" name="password" style="width: 100px;" /></td>      
  10.                </tr>      
  11.                <tr>        
  12.                <td>驗證碼:</td>        
  13.                <td><input type="text" name="validateCode" style="width: 50px;" /><img src="validateCode.img" /></td>      
  14.                </tr>      
  15.                <tr>        
  16.                <td colspan="2"><input type="submit" value="登陸" /></td>      
  17.                </tr>    
  18.                </table> 
  19. </form> 

有一個很不幸的事情,這種登陸框到處都有。而你,還不得不給這個登陸框加上一些必須處理的事情,例如在提交的時候檢查一下輸入框是不是空的。顯然我們并不希望在所有的這些頁面都去寫一小段腳本,我們希望有一段腳本,能夠自動的在有這種登陸框的頁面處理這些事情。最好是,在沒有登陸框的頁面,它也不會有任何副作用,那么這樣的腳本真的存在么?

  1. $("form#loginForm input[type=submit]").click(function ()  
  2.            {    
  3.                var form = $("form#loginForm");    
  4.                var flag = true;    
  5.                form.find("input[type=text] , input[type=password]").each(function ()    
  6.           {    if (this.value == "" && flag)      
  7.                {      window.alert("請將登陸信息填寫完整");        
  8.                      flag = false;      
  9.           }    
  10.  });     
  11.              return flag;  
  12. }  
  13. ); 

注意這段腳本中選擇器的運用,通過id限定和find方法的范圍限定,我們牢牢地將這段腳本所影響的范圍控制在了一個id為loginForm的表單中。更絕妙的是,即使這個表單不存在于頁面,這段腳本也沒有任何的問題。不會在你IE的狀態欄弄一個黃色的感嘆號告訴你腳本出現了錯誤。你可以將這段腳本大膽放心的放在每一個頁面的JavaScript的引用中(這對于現有的技術來說再簡單不過),也不用擔心明天哪個頁面多了一個登陸塊你會需要去寫什么腳本。

這就是選擇器的絕妙之處,它使得我們的頁面元素可以通過約定來獲得某些行為,例如在這里,只要我們將登陸用的表單的id設置為loginForm,那么這個表單就會自動獲得提交的時候檢查所有輸入框的行為。這種約定的威力完全不僅如此,我們再來看一段神奇的腳本:

  1. $("form").submit(function ()  
  2.   {    
  3.      var flag = true;      
  4.      $(this).find("input[type=text][requiredrequired=required] , input[type=password][requiredrequired=required]").each(function ()    
  5.             {      
  6.                 if ($(this).val() == "")      
  7.                    {      window.alert("信息沒有填寫完整,請認真檢查必填項");        
  8.                           flag = false;      return false;      
  9.                    }    
  10.              }  
  11.     );     
  12.                 return flag;  
  13.    }  
  14. ); 


這段神奇的腳本可以讓你只需要在你的輸入框上加一個屬性required="required",然后表單提交的時候就會自動驗證這些輸入框里面是不是填了東西。這太神奇了,我們利用jQuery提前享受了HTML 5的新特性。

當我意識到jQuery的選擇器如此強大的威力的時候,我馬上想到,事實上如果將選擇器運用于我們傳統的頁面數據綁定,也會是一件非常棒的事情。這便是Jumony引擎的由來。Jumony將jQuery的選擇器和select then do藝術幾乎完整的搬到了C#中。在項目開發中帶來的效率提升和暢快的感覺,完全的超出了我原本的設想。

在這里,我仍不愿意過多的去談Jumony的功能細節。由于這個引擎仍在不斷的開發修改和內部測試中,現在并沒有可以公開的預覽,我只能說,敬請期待。我會繼續分享在Jumony開發和設計中過程中的。

最新的Jumony build已經實現如下選擇器支持:

  1. *、E、E E、E + E、E > E、E ~ E  
  2.  
  3. #identity、.class-name、[attr]、[attr=value]  
  4. [attr!=value]、[attr^=value]、[attr$=value]  
  5.  
  6. :nth-child、:nth-last-child、:nth-of-type、  
  7. :nth-last-of-type、:first-child、:last-child、  
  8. :first-of-type、:last-of-type 

 

【編輯推薦】

  1. jQuery核心部分原理的模擬代碼
  2. jQuery應用程序性能指標和調優
  3. jQuery高級應用:優化Web應用程序的最后絕招
  4. jQuery四大天王:核心函數詳解
  5. 拋磚引玉 自定義jQuery擴展接口
責任編輯:王曉東 來源: 博客園
相關推薦

2017-03-25 21:13:38

JavaScript排序

2013-04-25 13:58:15

編程

2018-03-13 15:00:22

智慧交通高鐵無人駕駛

2015-11-24 10:05:07

私有云虛擬化負載遷移

2010-04-08 08:18:55

iPad軟件開發iPhone

2021-11-05 11:17:45

互聯網996大廠

2024-11-26 11:02:17

2016-10-13 18:06:09

云計算多云模型

2015-02-04 09:45:40

2021-01-06 10:51:39

云計算云服務IT

2018-06-28 18:10:41

華為

2015-12-15 17:19:55

戴爾云計算

2011-11-17 13:25:43

垃圾郵件

2011-09-15 13:25:02

2022-11-02 11:48:03

Vanilla OSGNOMEUbuntu

2015-03-31 09:28:28

Hadoop大數據技術大數據未來道路

2018-06-27 17:24:24

華為

2021-07-26 22:33:41

切片結構體代碼

2025-04-17 02:00:00

數據分析SQL大數據

2018-11-12 13:53:07

組件化架構路由
點贊
收藏

51CTO技術棧公眾號

www.久久撸.com| 最新国产在线视频| 亚洲国产专区| 欧美亚洲国产视频小说| 国产精品视频一区二区三区综合| 日本福利在线| 另类国产ts人妖高潮视频| 国产精品国产亚洲伊人久久| 青青草娱乐在线| 久久久夜精品| 国产伦精品一区二区三区四区免费| 夜夜躁狠狠躁日日躁2021日韩| 精品少妇一区二区30p| 一级毛片免费视频| 亚洲欧美日韩在线| 天天操夜夜干| 色综合一区二区三区| 成人免费在线电影| 欧美一区二区三区四区在线观看| 亚洲资源一区| 伊人久久免费视频| 亚洲2区在线| 国产成人欧美在线观看| 91精品综合久久久久久久久久久| 97欧洲一区二区精品免费| 亚洲国产专区| 一区二区视频在线免费| av中文字幕不卡| 亚洲a中文字幕| 亚洲国产欧美日本视频| 亚洲女人的天堂| 三上悠亚在线观看二区| 欧美日韩性视频| 中文字幕资源网在线观看| 精品嫩草影院久久| 国产女优裸体网站| 国产高清在线观看免费不卡| 男人靠女人免费视频网站 | 免费h片在线观看| 黑人巨大精品欧美一区二区三区 | 一区二区三区在线播| 亚洲一区三区视频在线观看| 国产精品12区| 91大神影片| 黄色欧美网站| 可以免费在线看黄的网站| 亚洲va欧美va国产va天堂影院| 国语自产精品视频在线看8查询8| 先锋影音日韩| 国产欧美日韩麻豆91| 黄色的视频在线免费观看| 日韩av在线免费观看一区| 国语对白做受xxxxx在线中国 | 中文字幕精品一区二区三区精品| 国产精品成人一区二区三区| 一区二区精彩视频| 国产福利精品av综合导导航| 日韩视频一区二区三区在线播放免费观看| 欧美精品久久久久久久久| av资源在线播放| 欧美激情视频在线| 国产精品久久| 日本一道本久久| 色综合久久中文综合久久97 | 精品视频1区2区| 日韩久久99| 91久久久一线二线三线品牌| 国产成人在线免费观看| 亚洲一区二区三区精品中文字幕| 亚洲人成电影网站色www| 久久视频国产| 久久久在线视频| 日韩午夜黄色| 99re6在线视频| 久久综合久久99| 国产96在线 | 亚洲| 亚洲一区二区三区四区五区黄| 中文字幕第80页| 555夜色666亚洲国产免| 美女黄视频在线播放 | 久久亚洲影音av资源网| 国产精品扒开腿做爽爽爽视频软件| 日本精品久久久久久久| 国产一区高清在线| 美国一级片在线免费观看视频| 久久精品视频导航| 久久99精品久久久久久动态图| 在线三级av| 午夜精品福利在线观看| 激情文学综合插| 国产高清视频在线观看| 5566成人精品视频免费| 99久久伊人精品| 岛国毛片av在线| 国产精品免费一区二区三区四区 | 伊人久久青草| 欧美综合视频在线观看| 男人天堂网在线观看| 欧美精品videos另类日本| 国产美女娇喘av呻吟久久| 男人和女人做事情在线视频网站免费观看| 91精品国产777在线观看| 99riav久久精品riav| 香蕉伊大人中文在线观看| 韩国成人一区| 欧美日韩中文字幕在线视频| 免费成人三级| 午夜国产一区二区三区| 亚洲黄一区二区三区| 在线观看欧美| 一二三在线视频| 亚洲精品国产综合久久| 日本午夜免费一区二区| 在线国产99| 精品福利一区二区三区免费视频| 伊人天天综合| 国产粉嫩一区二区三区在线观看| 成人国产精品久久久久久亚洲| 国产欧美成人| 亚洲国产资源| 日韩欧美国产综合在线一区二区三区| 四季av一区二区三区免费观看| heyzo在线观看| 日本久久久久久| 一区二区在线观看av| 夜夜躁狠狠躁日日躁2021日韩| 99在线免费视频| 91精品国产高清| 1区2区3区国产精品| 久久爱www成人| 传媒在线观看| 欧美一区二区三区色| 欧美日韩国产免费观看| 性开放的欧美大片| 欧美成人午夜视频| 国产大片一区| 色黄视频在线| 亚洲一区二区日本| 欧美日韩国产美| 日本在线不卡视频一二三区| 亚洲黄色免费av| 欧美极品欧美精品欧美图片| 在线精品视频小说1| 极品中文字幕一区| 欧美三级理伦电影| 亚洲 国产 日韩 综合一区| 亚洲欧美中文另类| 久久精品综合网| 国产日产一区| yjizz视频网站在线播放| 亚洲第一综合| 中文字幕在线看视频国产欧美| aaa国产一区| 思热99re视热频这里只精品| 欧美日韩激情视频一区二区三区| 欧美18视频| 中文字幕成人精品久久不卡| 国产精品卡一卡二卡三| 欧美一区二区| 啊啊啊久久久| 91制片厂毛片| 成人资源av| 亚洲国产高清自拍| 亚洲国产精品精华液2区45| 久久五月天小说| 暖暖日本在线观看| 久草视频国产在线| 国产精品91久久久久久| 欧美三级在线视频| 国产成人精品亚洲777人妖| 台湾av在线二三区观看| 免费国产一区二区| 最近2019年中文视频免费在线观看| 亚洲欧美综合另类在线卡通| 欧美三级小说| 欧美天堂视频| 91视频国产观看| 婷婷六月综合| 欧美精品99| 久久久水蜜桃av免费网站| 国产日韩高清一区二区三区在线| 免费看欧美美女黄的网站| 美女视频黄a大片欧美| 黄色欧美日韩| 青青久久av| 久本草在线中文字幕亚洲| 久久久综合视频| 亚洲图片久久| 亚洲美女久久精品| 亚洲成人av动漫| 超碰在线97免费| 免费高清在线观看| 97久久人人超碰caoprom| 精东传媒在线观看| 加勒比在线日本| julia京香一区二区三区| 超碰96在线| 国产亚洲一区二区三区啪| 91久久午夜| 精品制服美女丁香|