天天看點

jquery選擇器,過濾器介紹

  1. 一、JQuery與JavaScript    
  2. 1.JavaScript庫    
  3. 使用過JavaScriptDOM的人都應該知道(比如昨天的練習),使用JSDOM進行頁面的操作是十分麻煩的。比如擷取、修改及添加子節點等這些操作。如果操作一個複雜的頁面呢?Ok,JavaScript庫是以誕生了。    
  4. 目前比較常見的JavaScript庫有:    
  5. 2.JQuery簡介    
  6. JQuery是繼Prototype之後又一個優秀的JavaScript庫。    
  7. JQuery理念:write less , do more.    
  8. JQuery優勢:輕量級、強大的選擇器、出色的 DOM 操作的封裝、可靠的事件處理機制、完善的Ajax、出色的浏覽器相容性、鍊式操作方式……。    
  9. 二、JQuery對象與DOM對象    
  10. 1.JQuery對象    
  11. JQuery對象就是使用“$(“DOMObj”)”,将DOM對象包裝起來。一般在JQuery對象前面加上“$”這樣與DMO對象區分,它已經是一種公認的命名約定。JQuery對象不能調用DOM對象的屬性和方法,同樣DOM對象也不能調用JQuery對象的屬性和方法。    
  12. 2.JQuery對象轉成DOM對象    
  13. 如果想使用JQuery對象調用DOM對象的方法,怎麼辦?應該将JQuery對象轉換成DOM對象,JQuery對象是一個數組對象,這個很特别。是以隻需調用JQueryObj[x]或JQueryObj.get(X);即可轉換為DOM對象。    
  14. 3.DOM對象轉換成JQuery對象    
  15. 使用“$(“DOMObj”)”将DOM對象包裝起來就可以了。    
  16. 三、JQuery選擇器    
  17. 選擇器是JQuery的根基,在JQuery 中,對事件處理,周遊DOM和Ajax操作都依賴于選擇器。這也是今天我們學習的重點内容。    
  18. 1.基本選擇器    
  19. 基本選擇器是JQuery中最常用的選擇器,也是最簡單的選擇器,它通過元素id、class 和标簽名來查找DOM元素。這個非常重要,下面的内容都是以此為基礎,逐級提高的。    
  20. 1).“$(“#id”)”,擷取id指定的元素,id是全局唯一的,是以它隻有一個成員。    
  21. 2).“$(“.class”)”,擷取class指定的元素,不同的元素可以具有相同的class屬性,是以它可能具有多個成員。    
  22. 3).“$(“element”)”,擷取element(元素名,比如div、table等)指定的元素,它可能具有多個成員。    
  23. 4).“$(“*”)”,擷取所有元素,相當于document。    
  24. 5).“$(“selector1,selector2,…,selectorN”)”,将每個選擇器比對到的元素合并後一起傳回。傳回selector1比對的集合+selector2比對的集合+…+selectorN比對的集合。    
  25. 2.層次選擇器    
  26. 什麼是層次?層次就是父子關系、兄弟關系的節點。是以,層次選擇器就是用來擷取指定元素的父子節點、兄弟節點。    
  27. 1).“$(“ancestor descendant”)”,擷取ancestor元素下邊的所有元素。    
  28. 2).“$(“parent > child”)”,擷取parent元素下邊的所有子元素(隻包含第一層子元素)。    
  29. 3).“$(“pre + next”)”,擷取緊随pre元素的後一個兄弟元素。    
  30. 4).“$(“pre ~ siblings”)”,擷取pre元素後邊的所有兄弟元素。    
  31. 3.過濾選擇器    
  32. 過濾?肯定是要添加過濾條件的。通過“:”添加過濾條件,比如“$(“div:first”)”傳回div元素集合的第一個div元素,first是過濾條件。    
  33. 按照不同的過濾規則,過濾選擇器可以分為基本過濾,内容過濾,可見性過濾,屬性過濾,子元素過濾和表單對象屬性過濾選擇器。    
  34. 1). 基本過濾選擇器    
  35. a) “:first”,選取第一個元素,别忘記它也是被放在一個集合裡哦!因為JQuery它是DOM對象的一個集合。如,“$("tr:first")”傳回所有tr元素的第一個tr元素,它仍然被儲存在集合中。    
  36. b) “:last”,選取最後一個元素。如,“$("tr:last")”傳回所有tr元素的最後一個tr元素,它仍然被儲存在集合中。    
  37. c) “:not(selector)”,去除所有與給定選擇器比對的元素。如,“$("input:not(:checked)")”傳回所有input元素,但去除被選中的元素(單選框、多選框)。    
  38. d) “:even”,選取所有元素中偶數的元素。因為JQuery對象是一個集合,這裡的偶數指的就是集合的索引,索引從0開始。    
  39. e) “:odd”,選取所有元素中奇數的元素,索引從0開始。    
  40. f) “:eq(index)”,選取指定索引的元素,索引從0開始。    
  41. g) “:gt(index)”,選取索引大于指定index的元素,索引從0開始。    
  42. h) “:lt(index)”,選取索引小于指定index的元素,索引從0開始。    
  43. i) “:header”,選取所有的标題元素,如hq、h2等。    
  44. j) “:animated”,選取目前正在執行的所有動畫元素。    
  45. 2). 内容過濾選擇器    
  46. 它是對元素和文本内容的操作。    
  47. a) “:contains(text)”,選取包含text文本内容的元素。    
  48. b) “:empty”,選取不包含子元素或者文本節點的空元素。    
  49. c) “:has(selector)”,選取含有選擇器所比對的元素的元素。    
  50. d) “:parent”,選取含有子元素或文本節點的元素。(它是一個父節點)    
  51. 3). 可見性過濾選擇器    
  52. 根據元素的可見與不可見狀态來選取元素。    
  53. “:hidden”,選取所有不可見元素。    
  54. “:visible”,選擇所有可見元素。    
  55. 可見選擇器:hidden 不僅包含樣式屬性 display 為 none 的元素,也包含文本隐藏域 (<input type=“hidden”>)和 visible:hidden 之類的元素。    
  56. 4).屬性過濾選擇器    
  57. 通過元素的屬性來選取相應的元素。    
  58. a) “[attribute]”,選取擁有此屬性的元素。    
  59. b) “[attribute=value]”,選取指定屬性值為value的所有元素。    
  60. c) “[attribute !=value]”,選取屬性值不為value的所有元素。    
  61. d) “[attribute ^= value]”,選取屬性值以value開始的所有元素。    
  62. e) “[attribute $= value]”,選取屬性值以value結束的所有元素。    
  63. f) “[attribute *= value]”,選取屬性值包含value的所有元素。    
  64. g) “[selector1] [selector2]…[selectorN]”,複合性選擇器,首先經[selector1]選擇傳回集合A,集合A再經過[selector2]選擇傳回集合B,集合B再經過[selectorN]選擇傳回結果集合。    
  65. 5). 子元素過濾選擇器    
  66. 一看名字便是,它是對某一進制素的子元素進行選取的。    
  67. a) “:nth-child(index/even/odd)”,選取索引為index的元素、索引為偶數的元素、索引為奇數的元素。    
  68. l nth-child(even/odd):能選取每個父元素下的索引值為偶(奇)數的元素。    
  69. l nth-child(2):能選取每個父元素下的索引值為 2 的元素。    
  70. l nth-child(3n):能選取每個父元素下的索引值是 3 的倍數的元素。    
  71. l nth-child(3n + 1):能選取每個父元素下的索引值是 3n + 1的元素。    
  72. b) “:first-child”,選取第一個子元素。    
  73. c) “:last-child”,選取最後一個子元素。    
  74. d) “:only-child”,選取唯一子元素,它的父元素隻有它這一個子元素。    
  75. 6). 表單過濾選擇器    
  76. 選取表單元素的過濾選擇器。    
  77. a) “:input”,選取所有<input>、<textarea>、<select >和<button>元素。    
  78. b) “:text”,選取所有的文本框元素。    
  79. c) “:password”,選取所有的密碼框元素。    
  80. d) “:radio”,選取所有的單選框元素。    
  81. e) “:checkbox”,選取所有的多選框元素。    
  82. f) “:submit”,選取所有的送出按鈕元素。    
  83. g) “:image”,選取所有的圖像按鈕元素。    
  84. h) “:reset”,選取所有重置按鈕元素。    
  85. i) “:button”,選取所有按鈕元素。    
  86. j) “:file”,選取所有檔案上傳域元素。    
  87. k) “:hidden”,選取所有不可見元素。    
  88. 7).表單對象屬性過濾選擇器    
  89. 選取表單元素屬性的過濾選擇器。    
  90. “:enabled”,選取所有可用元素。    
  91. “:disabled”,選取所有不可用元素。    
  92. “:checked”,選取所有被選中的元素,如單選框、複選框。    
  93. “:selected”,選取所有被選中項元素,如下拉清單框、清單框。    
  94. 四、JQuery中的DOM操作    
  95. 一種與浏覽器,平台,語言無關的接口。使用該接口可以輕松地通路頁面中所有的标準元件。    
  96. DOM Core:DOM Core 并不專屬于 JavaScript,任何一種支援 DOM 的程式設計語言都可以使用它。它的用途并非僅限于處理網頁,也可以用來處理任何一種是用标記語言編寫出來的文檔,例如:XML。    
  97. HTML DOM:使用 JavaScript 和 DOM 為 HTML 檔案編寫腳本時,有許多專屬于HTML-DOM的屬性。    
  98. CSS-DOM:針對于CSS操作,在JavaScript中,CSS-DOM 主要用于擷取和設定 style 對象的各種屬性。    
  99. 1.查找節點    
  100. 請見上面的“基本選擇器”。    
  101. 2.建立節點    
  102. 使用JQuery的工廠函數,建立一個新節點:var $newNode = $(“<p>你好</p>”);,然後将新節點插入到指定元素節點處。    
  103. 3.插入節點    
  104. 将新建立的節點,或擷取的節點插入指定的位置。    
  105. “$node.append($newNode)”,向每個比對的元素内部的結尾處追加結尾處。如,“$("p").append("<b>Hello</b>");”将"<b>Hello</b>"添加到"p"内部的結尾處。    
  106. “$newNode.appendTo($node)”,将新元素追加到每個比對元素内部的結尾處。    
  107. “$node.prepend($newNode)”,向每個比對的元素内部的結尾處追加開始處。如,“$("p").prepend("<b>Hello</b>");”将"<b>Hello</b>"添加到"p"内部的起始處。    
  108. “$newNode.prependTo($node)”, 将新元素追加到每個比對元素内部的開始處。    
  109. “$node.after($newNode)”,向每個比對的元素的之後插入内容,是并列兄弟。如,“$("p").after("<b>Hello</b>");”将"<b>Hello</b>"插入到"p"的後邊。它們是兄弟關系。    
  110. “$newNode.insertAfter($node)”,将新元素插入到每個比對元素之後。    
  111. “$newNode.before($node)”,向每個比對的元素的之前插入内容。如,“$("p").before("<b>Hello</b>");”将"<b>Hello</b>"插入到"p"的前面,它們是兄弟關系。    
  112. “$node.insertBefore($newNode)”,将新元素插入到每個比對元素之前。    
  113. 注意:如果插入的節點是不是新建立的,插入将變成移動操作。是以,在插入這樣的節點之前應該使用clone的節點。    
  114. 4.删除節點    
  115. 從DOM中删除所有比對的元素。如,“$("p").remove(".hello");”删除所為class屬性值為hello的p元素,還有它下面的所有元素。    
  116. 從DOM中清除所有比對的元素。如,“$("p").empty();”清除所有p元素,還有它下面的所有元素。    
  117. 5.複制節點    
  118. 克隆比對的DOM元素。如,“$("p").clone();”傳回克隆後的副本,但不具有任何行為。如果要将DOM的事件一起克隆,應該使用“$("p").clone(true);”。    
  119. 6.替換節點    
  120. 将所有比對的元素都替換為指定的 HTML 或 DOM 元素。如,$("p").replaceWith("<b>Paragraph. </b>");,将所有p元素,替換為"<b>Paragraph. </b>"。    
  121. 與replaceWith相返:$("<b>Paragraph. </b>").replaceAll("p");。    
  122. 7.包裹節點    
  123. wrap():将指定節點用其他标記包裹起來。該方法對于需要在文檔中插入額外的結構化标記非常有用, 而且不會破壞原始文檔的語義。如,“$("p").wrap("<div class='wrap'></div>");”。每個p元素被包裹到<div>中。    
  124. wrapAll():将所有比對的元素用一個元素來包裹。而wrap()方法是将所有的元素進行單獨包裹。如,“$("p").wrapAll("<div></div>");”,将所有p元素包裹到<div>中。    
  125. wrapInner():将每一個比對的元素的子内容(包括文本節點)用其他結構化标記包裹起來。如,“$("p").wrapInner("<b></b>");”, <b>被每一個p元素包裹。    
  126. 8.屬性設定    
  127. attr():擷取屬性和設定屬性。    
  128. 當為該方法傳遞一個參數時,即為某元素的擷取指定屬性。如,“$("img").attr("src");”,擷取img元素的src屬性值。    
  129. 當為該方法傳遞兩個參數時,即為某元素設定指定屬性的值。如,“$("img").attr("src","test.jpg");”,設定img元素的src屬性值為test.jsp。    
  130. jQuery 中有很多方法都是一個函數實作擷取和設定。如:attr(),html(),text(),val(),height(),width(),css()等。    
  131. removeAttr():删除指定元素的指定屬性。    
  132. 9.樣式操作    
  133. 可以通過“attr()”設定或擷取css樣式。    
  134. 追加樣式:addClass() 。如,“$("p").addClass("selected");”,向所有P元素中追加“selected”樣式。    
  135. 移除樣式:removeClass() --- 從比對的元素中删除全部或指定的class。如,“$("p").removeClass("selected");”,删除所有P元素中的“selected”。    
  136. 切換樣式:toggleClass() --- 控制樣式上的重複切換。如果類名存在則删除它,如果類名不存在則添加它。如,“$("p").toggleClass("selected");”,所有的P元素中,如果存在“selected”樣式就删除“selected”樣式,否則就添加“selected”樣式。    
  137. 判斷是否含有某個樣式:hasClass() --- 判斷元素中是否含有某個 class,有傳回 true; 否則傳回 false。如,“$(this).hasClass("protected")”,判斷目前節點是否有“protected”樣式。    
  138. 10.設定或擷取HTML、文本和值    
  139. 讀取和設定某個元素中的 HTML 内容: html(),該方法可以用于 XHTML,但不能用于 XML 文檔。    
  140. 讀取和設定某個元素中的文本内容:text(),該方法既可以用于 XHTML 也可以用于 XML 文檔。    
  141. 讀取和設定某個元素中的值:val(),該方法類似 JavaScript 中的 value 屬性。對于文本框,下拉清單框,單選框該方法可傳回元素的值(多選框隻能傳回第一個值)。如果為多選下拉清單框,則傳回一個包含所有選擇值的數組。    
  142. 11.常用周遊節點的方法    
  143. 取得比對元素的所有子元素組成的集合:children()。該方法隻考慮第一層子元素而不考慮任何後代元素。    
  144. 取得比對元素後面緊鄰的兄弟元素的集合(但集合中隻有一個元素):next()。    
  145. 取得比對元素前面緊鄰的兄弟元素的集合(但集合中隻有一個元素):prev()。    
  146. 取得比對元素前後所有的兄弟元素: siblings()。    
  147. 12.CSS-DOM操作    
  148. 擷取和設定元素的樣式屬性:css()。    
  149. 擷取和設定元素透明度:opacity()屬性。    
  150. 擷取和設定元素高度,寬度:height(),width()。在設定值時,若隻傳遞數字,則預設機關是px。如需要使用其他機關則需傳遞一個字元串,例如 “$(“p:first”).height(“2em”)”;    
  151. 擷取元素在目前視窗中的相對位移:offset()。它傳回的對象包含了兩個屬性:top,left。該方法隻對可見元素有效。    
  152. 五、JQuery中的事件    
  153. 1.加載DOM    
  154. 在頁面加載完畢後,浏覽器會通過 JavaScript 為 DOM 元素添加事件。在正常的 JavaScript 代碼中,通常使用 window.onload 方法,在JQuery 中使用$(document).ready() 方法。JQuery中的簡化寫法“$()”。在window.onload中注冊事件時,隻能在一個window.onload體中注冊。但使用JQuery,可以在多個$(document).ready()或$()中注冊。    
  155. 2.事件綁定    
  156. 對比對的元素對指定的事件綁定。如,昨天我們在window.onload中綁定事件的方法:“$("p").onclick(function(){ alert( $(this).text() );    
  157. });” 在JQuery的$(document).ready()中可以這樣綁定:“$("p").click(function(){ alert( $(this).text() );    
  158. });” 使用bind(),可以這樣綁定:$("p").bind("click", function(){ alert( $(this).text() );    
  159. });    
  160. 3.合成事件    
  161. hover():模拟光标懸停時間。當光标移動到元素上時,會觸發指定的第一個函數,當光标移出這個元素時,會觸發指定的第二個函數。如,懸停效果:$("td").hover( function () {$(this).addClass("hover");}, function () {$(this).removeClass("hover");});    
  162. toggle():用于模拟滑鼠連續單擊事件。第一次單擊元素,觸發指定的第一個函數,當再一次單擊同一個元素時,則觸發指定的第二個函數,如果有更多個函數,則依次觸發,直到最後一個。如,設定元素的選擇與非選中效果:    
  163. $("td").toggle( function () {$(this).addClass("selected");}, function () {$(this).removeClass("selected");});    
  164. 使用toggle()而不傳遞參數,效果為切換元素的可見狀态。    
  165. 4.事件的冒泡    
  166. 事件會按照 DOM 層次結構像水泡一樣不斷向上隻止頂端。    
  167. 解決:在事件處理函數中傳回 false,會對事件停止冒泡。還可以停止元素的預設行為。    
  168. 目前的所有UI互動或其事件,都支援這個特性。在自己的事件處理函數傳回false将中止事件的繼續向下傳遞。傳回true事件繼續向下傳遞。    
  169. 5.事件對象的屬性    
  170. 事件對象:當觸發事件時,事件對象就被建立了。在程式中使用事件隻需要為處理函數添加一個參數。在事件處理函數中使用些參數。如,擷取事件發生時,相對于頁面的位置:event.pageX, event.pageY,event是事件處理函數的參數。    
  171. 6.移除事件    
  172. 移除某按鈕上的所有click 事件:$(“btn”).unbind(“click”)    
  173. 移除某按鈕上的所有事件:$(“btn”).unbind();    
  174. one():該方法可以為元素綁定處理函數。當處理函數觸發一次後,事件立即被删除。即在每個對象上,事件處理函數隻會被執行一次。    
  175. 六、JQuery中的DOM動畫    
  176. 通過設定DOM對象的顯示與隐藏方式,可以産生動畫效果。    
  177. 1.無動畫效果的隐藏與顯示    
  178. hide():在HTML文檔中,為一個元素調用hide()方法會将該元素的display樣式改為none。代碼功能同css(“display”, “none”);相同。    
  179. show():将元素的display樣式改為先前的顯示狀态。    
  180. toggle():切換元素的可見狀态:如果元素時可見的,則切換為隐藏;如果元素時隐藏的,則切換為可見的。    
  181. 2.通過設定透明度效果的隐藏與顯示,達到淡入淡出的動畫效果    
  182. fadeIn(),fadeOut():隻改變元素的透明度。fadeOut() 會在指定的一段時間内降低元素的不透明度,直到元素完全消失。fadeIn() 則相反。如,用600毫秒緩慢的将段落淡入:$("p").fadeIn("slow");。    
  183. fadeTo():把不透明度以漸近的方式調整到指定的值(0 – 1 之間)。并在動畫完成後可選地觸發一個回調函數。如,用200毫秒快速将段落的透明度調整到0.25,動畫結束後,顯示一個“Animation Done”資訊框:“$("p").fadeTo("fast", 0.25, function(){ alert("Animation Done."); });”。    
  184. 3.通過設定高度效果的隐藏與顯示,達到滑下與收起的動畫效果    
  185. slideDown(),slideUp():隻會改變元素的高度。如果一個元素的display屬性為none,當調用slideDown() 方法時,這個元素将由上至下延伸顯示。slideUp() 方法正好相反,元素由下至上縮短隐藏。如,用600毫秒緩慢的将段落滑下:$("p").slideDown("slow");。    
  186. slideToggle():通過高度變化來切換比對元素的可見性。如,200毫秒快速将段落滑上或滑下,動畫結束後,會顯示一個“Animation Done”資訊框:“$("p").slideToggle("fast",function(){ alert("Animation Done."); });”。    
  187. 使用JavaScript、JQuery可以處理目前頁面的動态更新,再結合CSS樣式可以做出十分漂亮的UI,甚至比桌面軟體UI漂亮的多。JavaScript的編寫與調試非常麻煩,是以也有一些公司出品了專門針對JavaScript應用的簡化開發,比如Google出品的GWT,可以像使用Java編寫swing那樣編寫JavaScript。它為使用者提供像swing那樣的UI接口與事件等操作并且支援JAVA的核心庫。使用GWT自己的編譯器,可以将JAVA代碼編譯為JavaScript代碼、CSS樣式檔案和HTML。    
  188. 詳細出處參考:http://www.jb51.net/article/26261.htm  

繼續閱讀