精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

不只是口號 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

編程

2024-11-26 11:02:17

2010-04-08 08:18:55

iPad軟件開發iPhone

2018-03-13 15:00:22

智慧交通高鐵無人駕駛

2015-11-24 10:05:07

私有云虛擬化負載遷移

2021-11-05 11:17:45

互聯網996大廠

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大數據

2016-10-13 18:06:09

云計算多云模型

2015-12-15 17:19:55

戴爾云計算

2021-01-06 10:51:39

云計算云服務IT

2015-02-04 09:45:40

2018-06-28 18:10:41

華為

2011-11-17 13:25:43

垃圾郵件

2011-09-15 13:25:02

2013-12-20 09:55:11

飛魚星無線云飛魚星路由器飛魚星
點贊
收藏

51CTO技術棧公眾號

亚洲欧美日韩久久| 日韩国产欧美一区二区三区| 国产手机视频精品| 性欧美1819| 青春草视频在线观看| xfplay精品久久| 亚洲一区二区三区四区视频| 国产三级av片| 五月天激情综合网| 国产亚洲精品久久久久动| www激情五月| 欧美性理论片在线观看片免费| ●精品国产综合乱码久久久久| 激情视频在线观看一区二区三区| 中文字幕一区二区三区免费看| 国产精品久久| 日韩在线视频观看| 伊人网伊人影院| 91成人精品在线| 欧美三级韩国三级日本一级| 国产精品网站免费| 亚洲奶水xxxx哺乳期| 中文字幕成人在线观看| 蜜桃传媒一区二区| 欧美一级淫片aaaaaa| 久久精品理论片| 国产成人在线精品| 男人日女人网站| 亚洲视频福利| 欧美成人精品在线播放| 成人免费视频入口| 国产精品探花在线观看| 日韩av最新在线观看| 国产人妖在线观看| 色妞ww精品视频7777| 欧美精品亚洲一区二区在线播放| 国产成人久久婷婷精品流白浆| 福利小视频在线| 亚洲人被黑人高潮完整版| 亚洲日本精品一区| av在线第一页| 国产日韩精品一区二区三区在线| 美女主播视频一区| 日本国产在线| 久久亚洲私人国产精品va媚药| 精品卡一卡二| 亚洲aaa在线观看| 久久综合久久久久88| 激情伦成人综合小说| 日韩中文字幕综合| 91视频在线观看免费| 久久精品人成| 国产黄色片在线观看| 亚洲国产精品ⅴa在线观看| 日本免费高清一区二区| 国产成人天天5g影院在线观看| 久久久久久97三级| 亚洲欧美日韩精品久久久| 午夜精品一区| 1024成人网色www| 国产成人一二三区| 久草在线视频网站| 福利微拍一区二区| 亚洲性生活网站| 欧美高清免费| 日韩欧美在线影院| 中文在线一区二区三区| 啪啪亚洲精品| 视频在线观看99| 黑人巨大精品一区二区在线| 亚洲视频久久| 国产97在线观看| 一本色道久久综合无码人妻| 国产成人亚洲综合a∨婷婷图片| 国产欧美日韩伦理| 久久经典视频| 亚洲美女屁股眼交3| 亚洲人成无码网站久久99热国产| gay欧美网站| 欧美日韩极品在线观看一区| 色婷婷狠狠18禁久久| 一本色道久久综合亚洲精品酒店 | 国产美女久久久| 国产成人精品一区二三区四区五区 | 国产精品探花一区二区在线观看| 色综合综合色| 欧美成人精品在线观看| 国产又黄又猛又粗又爽| 国产乱码精品一品二品| 久久精品日产第一区二区三区精品版 | 成a人片国产精品| 日本在线一区| 第四色日韩影片| 在线国产电影不卡| 亚洲美女精品视频| 成人av动漫在线观看| 欧美激情精品久久久| 国产精品第六页| 国产成人综合亚洲网站| 日韩精品久久久免费观看| 手机av免费在线| 在线视频一区二区免费| 在线看黄色的网站| 亚欧美无遮挡hd高清在线视频| 97色在线观看| 99久久久无码国产精品免费| 久久久久国产一区二区三区四区 | 欧美精品一区二区久久婷婷| 国产黄色片在线| 午夜亚洲福利在线老司机| 成人黄动漫网站免费| 日本成人网址| 一本一道久久a久久精品| 少妇极品熟妇人妻无码| 天天综合精品| 国产精品视频一区二区高潮| 亚洲aaaaaaa| 亚洲成人午夜影院| 亚洲欧美激情一区二区三区| 久久在线播放| 国产精品露脸自拍| 九色网友自拍视频手机在线| 五月综合激情婷婷六月色窝| 日本xxxx免费| 欧美精品播放| 亚洲自拍偷拍网址| 黄网址在线观看| 欧美日韩小视频| 蜜桃久久精品成人无码av| 亚洲欧美久久| 久久99国产精品99久久| а√在线中文在线新版| 亚洲精品一线二线三线无人区| 91嫩草|国产丨精品入口| 久久精品国产第一区二区三区| 日韩欧美99| 精品3atv在线视频| 亚洲欧美国产视频| 黄色av网站免费观看| 久久综合久久综合久久综合| 日韩视频第二页| 天天操综合520| 456国产精品| 青青草娱乐在线| 欧美性生交大片免网| 国产特级黄色录像| 日韩黄色小视频| 午夜精品一区二区在线观看的| 欧美va视频| www.日韩视频| 99国产精品99| 亚洲在线视频网站| 亚洲天堂美女视频| 国产一区导航| 日韩av一区二区三区在线观看| 在线国产成人影院| 精品国内产的精品视频在线观看| 国产同性人妖ts口直男| 亚洲综合在线五月| 人妻丰满熟妇aⅴ无码| 日韩影院在线观看| 国产av不卡一区二区| 亚洲精品aⅴ| 欧洲亚洲妇女av| 91社区在线观看播放| 这里只有精品视频在线观看| 久久久久成人精品无码| 99国产麻豆精品| 国产wwwxx| 欧美96在线丨欧| 久久99精品久久久久久久青青日本 | 欧美日本二区| 久久天堂国产精品| 免费一级欧美在线观看视频| 欧美大片免费观看在线观看网站推荐| 全部免费毛片在线播放一个| 欧美影院一区二区| 99精品久久久久| 26uuu国产日韩综合| 日日干日日操日日射| 99国产精品自拍| 亚洲一区影院| 男人的天堂久久| 国产精品直播网红| 成人三级高清视频在线看| 在线观看视频亚洲| 国产91久久久| 欧美日韩电影一区| 国产手机在线视频| 亚洲婷婷在线视频| 国产网站无遮挡| 精品一区二区影视| 国产97在线 | 亚洲| 66国产精品| 日本一区二区免费看| av在线亚洲色图| 国产精品无码专区在线观看| 免费在线小视频| 久久综合久中文字幕青草| 嫩草研究院在线| 亚洲а∨天堂久久精品9966| 91福利免费视频| 色猫猫国产区一区二在线视频| a级黄色片免费看| 国产精品久久久久一区二区三区共| 第四色在线视频| 国产高清精品久久久久| 亚洲 欧美 另类人妖| 欧美亚洲视频| 欧美激情视频免费看| 亚洲视频在线免费| 亚洲精品人成| 精品国产91久久久久久浪潮蜜月| 国产青春久久久国产毛片| 国内精品视频| 国产专区精品视频| 亚洲综合在线电影| 啪一啪鲁一鲁2019在线视频| 2019中文字幕在线电影免费 | 国产乱码精品一区二区三区忘忧草| 成年人免费大片| 成年网站在线免费观看| 欧美日韩在线大尺度| 宅男一区二区三区| 日韩不卡一区| 日本日本精品二区免费| 天天躁日日躁成人字幕aⅴ| 国产a一区二区| 日韩精品一区二区三区中文字幕 | www.热久久| 欧美一区二区三区免费在线看 | 精品粉嫩aⅴ一区二区三区四区| 国产手机视频在线| 91精品在线观看入口| 国产一区二区三区三州| 欧美欧美欧美欧美| 在线播放国产一区| 欧美日韩五月天| 中文字幕人妻丝袜乱一区三区| 欧洲精品在线观看| 国产成人a v| 欧美人与z0zoxxxx视频| 一级黄色大毛片| 91精品福利在线一区二区三区 | 精品国产免费人成电影在线观看四季| 国产三级三级在线观看| 欧美一级欧美一级在线播放| aaa一区二区| 精品福利二区三区| 人人九九精品| 尤物九九久久国产精品的分类| av资源在线观看免费高清| 中日韩美女免费视频网站在线观看| 国产一级在线| xxx成人少妇69| 亚洲夜夜综合| 91成人在线视频| 人人鲁人人莫人人爱精品| 国产精品免费小视频| www.成人| 国产乱码精品一区二区三区中文| 老司机aⅴ在线精品导航| 日本一区二区三区精品视频| 国产精品99一区二区三| 久草视频这里只有精品| 国产精品日韩| 欧美日韩亚洲自拍| 国产精品一区二区免费不卡| 国产极品一区二区| 中文字幕免费观看一区| 免费毛片在线播放免费| 高跟丝袜欧美一区| 国产又黄又粗又硬| 亚洲变态欧美另类捆绑| 国产视频福利在线| 欧美精品在线极品| 伊伊综合在线| 91在线|亚洲| 亚洲区小说区| 成人手机在线播放| 性高湖久久久久久久久| 伊人色在线观看| 91玉足脚交白嫩脚丫在线播放| 国产精品久久国产精麻豆96堂| 一区二区欧美在线观看| 一级黄色av片| 亚洲精品一区二区精华| 超碰国产在线| 97超级碰碰人国产在线观看| 深夜视频一区二区| 国产一区在线免费观看| 日韩精品一区二区久久| 国产午夜大地久久| 韩国毛片一区二区三区| 手机av免费看| 亚洲午夜在线视频| 艳妇乳肉豪妇荡乳av| 精品性高朝久久久久久久| 亚洲综合影视| 国产精品你懂得| 清纯唯美亚洲经典中文字幕| 看全色黄大色大片| 日产欧产美韩系列久久99| 韩国三级hd两男一女| 亚洲免费av在线| 中文字幕在线2019| 亚洲欧美另类在线观看| ****av在线网毛片| 亚洲最大av网站| 国产大片一区| 欧美大尺度做爰床戏| 91女人视频在线观看| 日本熟妇毛耸耸xxxxxx| 91精品国产色综合久久不卡蜜臀 | 亚洲AV无码一区二区三区性| 中文字幕欧美日韩在线| 午夜裸体女人视频网站在线观看| 91在线免费看片| 亚洲va在线| 日本高清久久久| 中文成人综合网| 日本欧美www| 亚洲午夜国产成人av电影男同| 日韩伦理在线一区| 精品久久久久久综合日本 | 91爱视频在线| 久久久久观看| 国产原创popny丨九色| thepron国产精品| 国产第一页第二页| 精品精品国产高清a毛片牛牛| а√天堂在线官网| 91在线短视频| 在线观看亚洲| 喷水视频在线观看| 粉嫩老牛aⅴ一区二区三区| 手机av在线免费观看| 韩剧1988在线观看免费完整版| a级日韩大片| 国产v片免费观看| av亚洲精华国产精华精| 天天综合天天干| 亚洲人成在线观看网站高清| 成人免费看视频网站| 日韩中文一区二区三区| 日本在线不卡视频| 天堂av免费在线| 欧美一区二区在线看| 污污影院在线观看| 精品国产aⅴ麻豆| 性娇小13――14欧美| 久久视频一区二区三区| 欧美高清你懂得| 好看的中文字幕在线播放| 久久精品一区二区三区不卡免费视频| 亚洲一区欧美激情| 精品成人无码一区二区三区| 欧美亚洲一区三区| 黄色在线免费网站| 国产高清自拍一区| 免费在线亚洲欧美| www亚洲色图| 欧美一级电影网站| 国内激情视频在线观看| 色综合久久av| 国产一区二区伦理| 日韩欧美一级视频| 神马久久久久久| 涩涩屋成人免费视频软件| av黄色在线网站| 国产精品久久久久久久久免费丝袜| 国产视频在线免费观看| 91av国产在线| 天天做天天爱天天综合网| 亚洲一区二区三区黄色| 色老综合老女人久久久| www在线免费观看视频| 久久99久久精品国产| 蜜臀av国产精品久久久久| 激情四射综合网| 亚洲少妇中文在线| 亚洲视频一起| 99视频精品免费| 夜夜嗨av一区二区三区中文字幕 | 69久久夜色精品国产69| 日本欧美国产| 国产chinese中国hdxxxx| 欧美日韩美少妇| 国产中文在线播放| 五月天色婷婷综合| 久久影音资源网| www.黄色一片| 国产伦精品一区二区三区精品视频| 一区三区视频| 国产精品一区二区亚洲| 国产丝袜精品视频| 97人人澡人人爽91综合色| 在线看的黄色网址| 色偷偷久久人人79超碰人人澡| 日本无删减在线|