前言:第一次寫博客有點緊張233333,我會在博客里放一下在賭這本書過程中遇到的一些有用的知識點,希望等幫助到大家。好了正題開始(只要是我不知道該說啥了= =) 一,資源(在w3cfuns資源中可以找到第一版和第二版) 《鋒利的jquery》: http://pan.baidu.com/share/ ...
前言:第一次寫博客有點緊張233333,我會在博客里放一下在賭這本書過程中遇到的一些有用的知識點,希望等幫助到大家。好了正題開始(只要是我不知道該說啥了= =)
一,資源(在w3cfuns資源中可以找到第一版和第二版)
《鋒利的jquery》: http://pan.baidu.com/share/link?shareid=1725756399&uk=4245516461 (PDF)
http://www.readfar.com/books/5520ce503063e1f304000696(ebup)
二、個人整理的一些內容
1.解決Jq與其他庫的衝突問題
在jQuery庫中,幾乎所有插件都被限制在自己的命名空間里。通常,全局對象都被很好的存在jQuery命名空間里,與其他js庫共用時一般不會產生衝突如(Prototype、MooTools、YUI)
1.jQuery庫在其他庫之後導入(這裡指<head>引用js庫的順序)
(1)如果想確保jQuery不會與其他庫衝突,又想自定義一個快捷方式,可以進行如下操作
自定義一個快捷方式,將$轉讓給其他庫使用
var $j = jQuery.noConflict(); //自定義一個快捷方式 $j(function(){ //使用jQuery,利用自定義快捷方式$j $j("p").click(function(){ alert( $j(this).text() ); }) }) $("XX").style.display = 'none' ; //使用prototype.js
(2)如果不想備用名稱,還想使用$,且不相與其他庫衝突,可以進行如下操作
1)轉讓$給其他庫,然後在jQuery設定頁面內使用jQuery的 ' $ ' ,在外部使用其他庫的 ' $ '
jQuery.noConflict(): //將變數$的控制權轉讓 jQuery(function($){ //在使用jQuery的頁面載入時時執行的函數 $("p").click(functin(){ //在函數內部繼續使用$()方法 alert( $(this).text() ); }) }) $("XX").style.display = 'none'; //在函數外部使用prototype.js
2)定義匿名函數並設置形參為$
jQuery.noConflict(); //將變數$的控制權轉讓給其他庫 (function($){ //定義匿名函數,形參為$ $(function(){ //匿名函數內的$均為jQuery $("p").click(function(){ alert( $(this).text() ); //繼續使用jQuery的$()方法 }); }); })(jQuery); //執行匿名函數且傳遞實參jQuery $("XX").style.display = 'none'; //使用prototype.js
2.jQuery庫在其他庫之前導入
直接使用”jQuery“來使用jQuery庫的函數,同時" $() "方法作為其他庫的快捷方式,無需調用noConflict()函數
jQuery(function(){ //直接使用jQuery,無需調用 "jQuery.noConflict()" 函數 jQuery("p").click({ alert( jQuery(this),text() ); }) }) $("XX").style.display = 'none'; //在jQuery函數外部使用prototype.js
2.jQuery選擇器
jQuery選擇器完全繼承了CSS的風格,利用jQuery選擇器,可以非常便捷的找出特定 DOM 元素。
1.完善的處理機制
(1)使用jQuery選擇器可以避免因使用傳統的getElementById()等函數因無法找到頁面元素而報錯的情況,jQuery選擇器即使獲取不到元素也不會報錯
.demo{ //給class為demo的元素添加樣式 } $(".demo").click(function(){ //給class為demo的元素添加點擊事件 }) //傳統函數 if(document.getElementById("XX")){ //為避免找不到元素而進行非空檢測 document.getElementById("XX"),style.color = "red"; } //jQuery選擇器 $(’#XX‘).css("color","red"); //無需判斷是否存在
(2) 判斷網頁上是否存在元素時,應註意$('#XX')獲取的永遠是對象
//錯誤實例 if($('#XX ')){ //Do something } //根據獲取到元素的長度判斷 if( $('#XX').length>0 ){ //Do something }
//或者轉化為DOM對象判斷 if( $('#XX')[0] ){ //Do something
}
2.一些神奇的選擇器與jQuery等價方法
(2-6)選取prev元素後的下一個<div>同輩元素,(2-7)選取id為 "prev" 的元素後面所有的<div>同輩元素
3.過濾選擇器
通過特定的過濾規則篩選所需DOM元素,與CSS的偽類選擇器語法校內溝通,都以(:)開頭。
1.基本過濾選擇器
2.內容過濾選擇器
3.屬性過濾器
[attribute] 一一選取擁有此屬性的元素 [attribute1][attribute2][attribute3]選擇滿足多個條件的元素(每選擇一次,縮小範圍一次)
[arrtibute XX value]中XX為如下符號是分別代表不同的涵義
"=" 一一屬性的值為value "*=" 一一屬性的值含有value "^=" 一一屬性的值以value開始 "$=" 一一屬性的值以value結束 "!=" 一一屬性的值不等於value(沒有屬性arrtibute的元素也會被選取)
"~=" 一一選取屬性用空格分隔的值中包含一個給定的元素(例如 $('div'[title~="uk"]') 選取<div title="uo uk Aodo"/>元素)
4.表單對象屬性過濾
4.選擇器中的一些註意事項
1.選擇器中含有 “.”、“#”、“(”、“]” 等特殊字元
<div id="id#b">bb</div> //錯誤:$("#id#b") 正確:$("#id\\#b"); <div id="id[1]">cc</div> //錯誤:$("#id[1]") 正確:$("#id\\[1\\] ");
2.選擇器中“空格”的坑
有如下代碼
<div class = "test"> <div style = "display:none;">aa</div> <div style = "display:none;">bb</div> <div style = "display:none;">cc</div> <div class = "test" style = "display:none;">dd</div> </div> <div class = "test" style = "display:none;">ee</div> <div class = "test" style = "display:none;">ff</div>
使用jQuery選擇器獲取他們,會獲取不同的結果。之所以會出現這種情況是因為後代選擇器和過濾選擇器的不同
var $t_a = $('.test :hidden'); //帶空格的jQuery選擇器(後代選擇器,選擇class為“test”的後代元素里hidden的元素) var $t_b = $('.test:hidden'); //不帶空格的jQuery選擇器(過濾選擇器,選擇隱藏的class為“test”的元素) var len_a = $t_a.length; var len_b = $t_b.length; alert(" $('.test :hidden') = " + len_a); //輸出 4 alert(" $('.test:hidden') = " + len_b); //輸出 3
三、實例
實現品牌列表的精簡顯示和全部顯示效果圖如下。單擊“顯示全部商品”按鈕時,顯示全部品牌,列表部分高亮顯示;單擊“精簡顯示品牌”按鈕時,隱藏部分品牌,高亮顯示消失。
html頁面
<div class="SubCategoryBox"> <ul> <li><a href="#">佳能</a><i>(30440)</i></li> <li><a href="#">索尼</a><i>(27220)</i></li> <li><a href="#">三星</a><i>(20284)</i></li> <li><a href="#">尼康</a><i>(56210)</i></li> <li><a href="#">松下</a><i>(261230)</i></li> <li><a href="#">卡西歐</a><i>(9440)</i></li> <li><a href="#">富士</a><i>(20540)</i></li> <li><a href="#">柯達</a><i>(29446)</i></li> <li><a href="#">賓得</a><i>(16444)</i></li> <li><a href="#">理光</a><i>(30450)</i></li> <li><a href="#">奧林巴斯</a><i>(30120)</i></li> <li><a href="#">明基</a><i>(12340)</i></li> <li><a href="#">愛國者</a><i>(15440)</i></li> <li><a href="#">其他品牌相機</a><i>(3440)</i></li> </ul> <div class="showmore"> <a href="more.html"><span>顯示全部品牌</span></a> </div> </div>
css部分
* { margin: 0; padding: 0; } .clearfix { content: ""; clear: both; } .SubCategoryBox { width: 600px; border: 1px solid #ccc; padding: 10px; position: relative; left: 30%; } .SubCategoryBox ul { list-style: none; } .SubCategoryBox ul li { float: left; width: 33.3%; height: 30px; line-height: 30px; text-align: center; } .SubCategoryBox ul li a { text-decoration: none; color: #000; } .showmore { width: 100%; height: 30px; text-align: center; } .showmore a { display: inline-block; width: 100px; height: 30px; line-height: 30px; border: 1px solid #ccc; padding: 2px; text-decoration: none; color: #000; } .promoted { color: red; }