雖然現在MVVM框架盛行,但是難免有時候一些時候操作dom時,jquery帶來的相容性大大提高了我們的效率,所以那就作為平常需要的時候緊急去查詢,總結了一些常用的寫法,對於第一次接觸jquery的人來說也很通俗易懂,因為我就是因為需要才剛剛去學的jquery
如果出現錯誤,請在評論中指出,我也好自己糾正自己的錯誤
author: thomaszhou
大坑
千萬不要寫箭頭函式代替function()的寫法
$("p").on("click", function(){
alert( $(this).text() ); // 指向當前觸發click事件的元素p的文字
});
// 如果我們將function寫成箭頭函式
$("p").on("click", () => {
alert( $(this).text() ); // 此時this指向的就是document
});
複製程式碼
一、尋找元素
(1)選擇器
基本選擇器、層級選擇器、屬性選擇器 與CSS類似,這裡不再細說
- 1.基本選擇器
$("#id") //ID選擇器
$("div") //元素選擇器
$(".classname") //類選擇器
$(".classname,.classname1,#id1") //組合選擇器
複製程式碼
- 2.層次選擇器
$("#id>.classname ") //子元素選擇器
$("#id .classname ") //後代元素選擇器
$("#id + .classname ") //緊鄰下一個元素選擇器
$("#id ~ .classname ") //兄弟元素選擇器
eg:
$("p > .ex1 ") // p元素的class=ex1的子元素
複製程式碼
- 3.過濾選擇器(重點)
$("li:first") //第一個li
$("li:last") //最後一個li
$("li:even") //挑選下標為偶數的li
$("li:odd") //挑選下標為奇數的li
// 從0開始
$("li:eq(4)") //下標等於4的li
$("li:gt(2)") //下標大於2的li
$("li:lt(2)") //下標小於2的li
$("li:not(#runoob)") //挑選除 id="runoob" 以外的所有li
複製程式碼
- 3.2內容過濾選擇器
$("div:contains('Runob')") // 包含 Runob文字的元素
$("td:empty") //不包含子元素或者文字的空元素
$("div:has(selector)") //含有選擇器所匹配的元素
$("td:parent") //含有子元素或者文字的元素
複製程式碼
- 3.3可見性過濾選擇器
$("li:hidden") //匹配所有不可見元素,或type為hidden的元素
$("li:visible") //匹配所有可見元素
複製程式碼
- 3.4屬性過濾選擇器(適用於自定義屬性)
$("div[id]") //所有含有 id 屬性的 div 元素
$("div[id='123']") // id屬性值為123的div 元素
$("div[id!='123']") // id屬性值不等於123的div 元素
$("div[id^='qq']") // id屬性值以qq開頭的div 元素
$("div[id$='zz']") // id屬性值以zz結尾的div 元素
$("div[id*='bb']") // id屬性值包含bb的div 元素
$("input[id][name$='man']") //多屬性選過濾,同時滿足兩個屬性的條件的元素
eg:
$("div[class='ex1']") // class屬性值為ex1的div 元素
$("div[ex='ex1']") // ex屬性值為ex1的div 元素
複製程式碼
- 3.5狀態過濾選擇器
$("input:enabled") // 匹配可用的 input
$("input:disabled") // 匹配不可用的 input
$("input:checked") // 匹配選中的 input
$("option:selected") // 匹配選中的 option
複製程式碼
- 4.表單選擇器
$(":input") //匹配所有 input, textarea, select 和 button 元素
$(":text") //所有的單行文字框,$(":text") 等價於$("[type=text]"),推薦使用$("input:text")效率更高,下同
$(":password") //所有密碼框
$(":radio") //所有單選按鈕
$(":checkbox") //所有核取方塊
$(":submit") //所有提交按鈕
$(":reset") //所有重置按鈕
$(":button") //所有button按鈕
$(":file") //所有檔案域
複製程式碼
(2)篩選器
- 過濾
$("p").eq(0) //當前操作中第N個jQuery物件,類似索引
$('li').first() //第一個元素
$('li').last() //最後一個元素
$(this).hasClass("test") //元素是否含有某個特定的類,返回布林值
$('li').has('ul') //包含特定後代的元素
複製程式碼
- 查詢
$("div").children() //div中的每個子元素,第一層
$("div").find("span") //div中的包含的所有span元素,子子孫孫
$("p").next()    //緊鄰p元素後的一個同輩元素
$("p").nextAll() //p元素之後所有的同輩元素
$("#test").nextUntil("#test2") //id為"#test"元素之後到id為'#test2'之間所有的同輩元素,掐頭去尾
$("p").prev() //緊鄰p元素前的一個同輩元素
$("p").prevAll() //p元素之前所有的同輩元素
$("#test").prevUntil("#test2") //id為"#test"元素之前到id為'#test2'之間所有的同輩元素,掐頭去尾
$("p").parent() //每個p元素的父元素
$("p").parents() //每個p元素的所有祖先元素,body,html
$("#test").parentsUntil("#test2") //id為"#test"元素到id為'#test2'之間所有的父級元素,掐頭去尾
$("div").siblings() //所有的同輩元素,不包括自己
複製程式碼
二、jQuery HTML / CSS 方法
(1) 屬性操作
- 基本屬性操作
//
//當該方法用於返回屬性值,則返回第一個匹配元素的值。
$("img").attr("src");        //返回文件中所有影象的src屬性值
//當該方法用於設定屬性值,則為匹配元素設定一個或多個屬性/值對。
$("img").attr("src","test.jpg"); //設定所有影象的src屬性
$("img").removeAttr("src");   //將文件中所有的img的src屬性刪除(多個)
//prop()、removeProp() 方法attr()、removeAttr()用法和特性一樣
$("input[type='checkbox']").prop("checked", true); //選中核取方塊(返回第一個匹配元素的值。)
$("img").removeProp("src");    //刪除img的src屬性v
複製程式碼
提示:如需檢索 HTML 屬性,請使用 attr() 方法代替。
提示:如需移除屬性,請使用 removeProp() 方法。
(2) CSS類
<script>
$("p").addClass("selected");   //為所有p元素加上 'selected' 類
$("p").addClass("selected1 selected2"); // 給所有p加上selected1和selected2類(中間用空格隔開)
$("p").removeClass("selected"); //從p元素中刪除 'selected' 類
$("p").addClass("selected1 selected2"); // 移除所有p元素上的selected1和selected2類(中間用空格隔開)
$("p").toggleClass("selected"); //如果存在就刪除,否則就新增
//多個類,同上
複製程式碼
(3) HTML程式碼/文字/值
// 當該方法用於返回內容時,則返回(第一個)匹配元素的內容。
$('p').html();            //返回p元素的html內容(匹配第一個)
// 當該方法用於設定內容時,則重寫所有匹配元素的內容。
$("p").html("Hello <b>nick</b>!"); //設定p元素的html內容
複製程式碼
提示:如需設定或返回被選元素的 innerHTML(文字 + HTML 標記),請使用 html() 方法。
//特性同html
$("input").val();          //獲取文字框中的值(匹配第一個)
$("input").val("nick");      //設定文字框中的內容
複製程式碼
注意:val() 方法通常與 HTML 表單元素一起使用。
// 當該方法用於返回內容時,則返回**(所有)**匹配元素的文字內容(會刪除 HTML 標記)。
$('p').text();            //返回p元素的文字內容(匹配所有!!!!!)
// 返回的是字串形式
// 當該方法用於設定內容時,則重寫所有匹配元素的內容。
$("p").text("nick");        //設定p元素的文字內容
複製程式碼
提示:如只需設定或返回被選元素的文字內容(不包括HTML標記),請使用 text() 方法。
(唯一一個,用於返回內容時,是匹配所有的元素) ! ! ! ! ! ! ! ! ! ! ! !! ! ! !!
(4) CSS操作 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 樣式
//
$("p").css("color"); //訪問檢視p元素的color屬性(匹配第一個)
$("p").css("color","red"); //設定p元素的color屬性為red
$("p").css({ "color": "red", "background": "yellow" }); //設定p元素的color為red,background屬性為yellow(設定多個屬性要用{}字典形式)
複製程式碼
- 位置
$('p').offset() //元素在當前視口的相對偏移,Object {top: 122, left: 260}(匹配第一個)
$('p').offset().top // 122
$('p').offset().left // 260
$('p').offset({top: 10, left:10}); // 給所有元素p新增“display:relaative,top:10px,left:10px”的樣式(匹配所有)
$("p").position() //元素相對父元素的偏移,對可見元素有效(匹配第一個),Object {top: 117, left: 250}
$("p").position().top // 117
$("p").position().left // 250
複製程式碼
$(window).scrollTop() //獲取滾輪滑的高度
$(window).scrollLeft() //獲取滾輪滑的寬度
$(window).scrollTop('100') //設定滾輪滑的高度為100
複製程式碼
提示:當滾動條位於最頂部-scrollTop(最左邊-scrollLeft)時,位置是 0。
- 尺寸**********************************************************
// (1) 當下面方法用於返回值時, 則返回(第一個匹配)元素的高度。
// (2) 當下面方法用於設定值時,則設定所有匹配元素的高度。
//
$("p").height(); //獲取p元素的高度(僅內容)
$("p").width(); //獲取p元素的寬度
$("p").height(30); //設定所有p元素高度為30px
$("p").width(30); //設定所有p元素寬度為30px
$("p:first").innerHeight() //獲取第一個匹配元素內部區域高度(內容 + padding)
$("p:first").innerWidth() //獲取第一個匹配元素內部區域寬度(內容 + padding)
$("p:first").outerHeight() //匹配元素外部高度(內容 + padding + border)
$("p:first").outerWidth() //匹配元素外部寬度(內容 + padding + border)
$("p:first").outerHeight(true) //為true時包括邊距(內容 + padding + border + margin)
複製程式碼
border,margin,padding別忘了是兩邊都有,算的時候記得乘2
(5)文件處理
- 內部插入
//
$("p").append("<b>nick</b>"); //每個p元素內的尾部追加內容
$("p").appendTo("div"); // 將所有p元素(匹配的值)移動到所有的div元素內的尾部(注意,匹配的p元素是直接移動的,原本的位置都沒有了)
$("p").prepend("<b>Hello</b>"); //每個p元素內的頭部追加內容
$("p").prependTo("div");   //將所有p元素(匹配的值)移動到所有的div元素內的頭部
複製程式碼
- 外部插入
//
$("p").after("<b>nick</b>"); //每個p元素同級之後插入內容
$("p").before("<b>nick</b>"); //在每個p元素同級之前插入內容
// 下面的其實就是反過來
$("p").insertAfter("#test"); //所有p元素(匹配的值)插入到id為test元素的後面
$("p").insertBefore("#test"); //所有p元素(匹配的值)插入到id為test元素的前面
複製程式碼
- 替換
$("p").replaceWith("<b>Paragraph. </b>"); //將所有匹配的元素替換成指定的HTML或DOM元素
// 下面同上
$("<b>Paragraph. </b>").replaceAll("p"); //用匹配的元素替換掉所有 selector匹配到的元素
複製程式碼
- 刪除
//
$("p").empty(); //刪除匹配的元素集合中所有的子節點,不包括本身
$("p").remove(); //刪除所有匹配的元素,包括本身
$("p").detach(); //刪除所有匹配的元素(和remove()不同的是:所有繫結的事件、附加的資料會保留下來)
複製程式碼
- 複製
$("p").clone();   //克隆元素並選中克隆的副本
$("p").clone(true); //布林值指事件處理函式是否會被複制
複製程式碼
clone() 方法生成被選元素的副本,包含子節點、文字和屬性。
$("p").clone().appendTo("body"); // 這個和上面的appendTo例子不同就在於,把匹配的p元素複製一份,新增到body內的尾部,而不是之前的移動到尾部
複製程式碼
三、jQuery 事件方法
(1)頁面載入
當 DOM(document object model 文件物件模型)載入完畢且頁面完全載入(包括影象)時發生 ready 事件。
由於該事件在文件就緒後發生,因此把所有其他的 jQuery 事件和函式置於該事件中是非常好的做法。
ready() 方法規定當 ready 事件發生時執行的程式碼。
提示:ready() 方法不應該與 一起使用。
$(document).ready(function(){
do something...
});
//簡寫
$(function($) {
do something...
});
複製程式碼
(2) 頁面處理
自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品
。該方法給 API 帶來很多便利,我們推薦使用該方法,它簡化了 jQuery 程式碼庫。
//on() 方法在被選元素及子元素上新增一個或多個事件處理程式。繫結多個用{}。
$("p").on("click", function(){
alert( $(this).text() );
});
// 繫結多個事件
$('div').on({
'click': function() {
console.log($(this).text());
},
'mouseout': function() {
console.log(`${$(this).text()}移出了!`);
}
});
$("p").one( "click", fun...) // 主要區別:one 繫結一個一次性的事件處理函式
$("p").off( "click" ) //解綁一個事件
複製程式碼
注意:使用 on() 方法新增的事件處理程式適用於當前及未來的元素(比如由指令碼建立的新元素)。
提示:如需移除事件處理程式,請使用 off() 方法。
提示:如需新增只執行一次的事件然後移除,請使用 one() 方法。
(3)事件
$("p").click();   //單擊事件
$("p").dblclick(); //雙擊事件
$("input[type=text]").focus() //元素獲得焦點時,觸發 focus 事件
$("input[type=text]").blur() //元素失去焦點時,觸發 blur事件
$("button").mousedown()//當按下滑鼠時觸發事件
$("button").mouseup() //元素上放鬆滑鼠按鈕時觸發事件
複製程式碼
$("p").mousemove() //當滑鼠指標在指定的元素中移動時觸發事件
$("p").mouseover() //當滑鼠指標位於元素及其子元素上方時觸發事件
$("p").mouseenter() //當滑鼠指標位於元素上方時觸發事件(與mouseover有區別!)
$("p").mouseout()  //當滑鼠指標從元素及其子元素上移開時觸發事件
$("p").mouseleave()  //當滑鼠指標從元素上移開時觸發事件(與mouseout有區別!)
複製程式碼
區別:
- 區別一(mouseenter和mouseover)
- mouseenter 事件只有在滑鼠指標進入被選元素時被觸發
- mouseover 事件在滑鼠指標進入任意子元素時也會被觸發
- 區別二()
- mouseleave:只有在滑鼠指標離開被選元素時被觸發
- mouseout:在滑鼠指標離開被選元素或任意子元素時都會被觸發
// 與 keydown 事件相關的事件順序:keydown -> keypress -> keyup
//當鍵盤或按鈕被按下時觸發事件 (window可以換成別的元素,例如input)
$(window).keydown()
//keypress 事件與 keydown (window可以換成別的元素) 事件類似。當按鈕被按下時發生該事件(區別看下面)
$(window).keypress()
$("input").keyup() //當按鈕被鬆開時觸發事件
// 請使用 event.which 屬性來返回哪個鍵被按下(keydown)或者鬆開(keyup)
$("input").keydown(function(event){ // keyup同理
$("div").html("Key: " + event.which);
});
// delete : 8
// enter: 13
// 空格: 32
複製程式碼
注意一:keypress 事件不會觸發所有的鍵(比如 ALT、CTRL、SHIFT、ESC)。請使用 keydown() 方法來檢查這些鍵。
// scroll 事件適用於所有可滾動的元素和 window 物件(瀏覽器視窗)。
$(window).scroll() //當使用者滾動時觸發事件(window可以換成別的元素)
$(window).resize() //當調整瀏覽器視窗的大小時觸發事件
// 當元素的值改變時發生 change 事件(僅適用於表單欄位)
$("input[type='text']").change() //當元素的值發生改變時觸發事件
複製程式碼
- 當用於 select 元素時,change 事件會在選擇某個選項時發生。
- 當用於 text field 或 text area 時,change 事件會在元素失去焦點時發生。而且初始化的時候要設定value屬性值(即使為'')
// 當 textarea 或文字型別的 input 元素中的文字被選擇(標記)時,會發生 select 事件。
$("input").select() //當input 元素中的文字被選擇時觸發事件
$("form").submit() //當提交表單時觸發事件
複製程式碼
(4) (event object) 物件
所有的事件函式都可以傳入event引數方便處理事件
$("p").click(function(event){
alert(event.type); //"click"
});
(evnet object)屬性方法:
event.pageX   //事件發生時,滑鼠距離網頁左上角的水平距離
event.pageY   //事件發生時,滑鼠距離網頁左上角的垂直距離
event.type   //事件的型別
event.which   //按下了哪一個鍵
event.data   //在事件物件上繫結資料,然後傳入事件處理函式
event.target  //性返回哪個 DOM 元素觸發了事件。
//阻止事件的預設行為(比如點選連結,會自動開啟新頁面\當點選提交按鈕時阻止對錶單的提交\)
event.preventDefault()  
event.stopPropagation() //停止事件向上層元素冒泡
複製程式碼
提示:請使用event.isDefaultPrevented() 方法來檢查指定的事件上是否呼叫了 preventDefault() 方法
提示:請使用 event.isPropagationStopped() 方法來檢查指定的事件上是否呼叫了stopPropagation方法。
四、jQuery 效果 方法
(1) 基本
//
$("p").show()     //顯示隱藏的匹配元素
$("p").show("slow"); //參數列示速度,("slow","normal","fast")
$("p").show(1000); //也可為設定毫秒
// 當隱藏/顯示元素時,如何使用 callback 引數。
$("p").show(1000,function(){
alert("Show()方法已完成!");
});
// hide() 和 show() 用法相同
$("p").hide()     //隱藏顯示的元素
$("p").toggle();    //toggle() 方法在被選元素上進行 hide() 和 show() 之間的切換。
複製程式碼
注意:show() 適用於通過 jQuery 方法和 CSS 中 display:none 隱藏的元素(不適用於通過 visibility:hidden 隱藏的元素)
(2) 滑動-相當於以滑動的方式實現show()和hide()、toggle()
- slideDown(): 以滑動方式顯示元素
- slideUp():以滑動方式隱藏元素
- slideToggle():以滑動方式切換slideDown(),slideUp()
speed(("slow","normal","fast",毫秒數),callback引數和show(),hide()方法一樣
$("p").slideDown("900"); //用900毫秒時間將段落滑下
$("p").slideUp("900");  //用900毫秒時間將段落滑上
$("p").slideToggle("900"); //用900毫秒時間將段落滑上,滑下
複製程式碼
(3) 淡入淡出-相當於以淡入淡出的方式實現show()和hide()、toggle()
speed(("slow","normal","fast",毫秒數),callback引數和show(),hide()方法一樣
$("p").fadeIn("900");    //用900毫秒時間將段落淡入
$("p").fadeOut("900");    //用900毫秒時間將段落淡出
$("p").fadeToggle("900");  //用900毫秒時間將段落淡入,淡出
$("p").fadeTo("slow", 0.6); //用900毫秒時間將段落的透明度調整到0.6
複製程式碼
(4) animate() 方法-執行 CSS 屬性集的自定義動畫
該方法通過 CSS 樣式將元素從一個狀態改變為另一個狀態。CSS屬性值是逐漸改變的,這樣就可以建立動畫效果。
只有數字值可建立動畫(比如 "margin:30px")。字串值無法建立動畫(比如 "background-color:red")。
提示:請使用 "+=" 或 "-=" 來建立相對動畫。
注意: 當與 animate() 方法一起使用時,該屬性名稱必須是駝峰寫法: 您必須使用 paddingLeft 代替 padding-left,marginRight 代替 margin-right,依此類推。
$("button").click(function(){
$("#box").animate({height:"300px"});
});
$(".btn1").click(function(){
$("body").animate({
backgroundPositionX:"+=100px",
backgroundPositionY:"+=200px"
});
});
複製程式碼
更多例子見這裡 $.trim(str)
五、jQuery 雜項方法
$.trim(str)   //去除字串兩端的空格
$("li").each(function(){ // 輸出每個 <li> 元素的文字
alert($(this).text())
});   
$.inArray( "John", arr ) //返回值John在陣列arr中的索引位置,不存在返回-1
$.grep()   //返回陣列中符合某種標準的元素
$.extend() //將多個物件,合併到第一個物件
$.makeArray() //將物件轉化為陣列
$.type() //判斷物件的類別(函式物件、日期物件、陣列物件、正則物件等等
$.isArray() //判斷某個引數是否為陣列
$.isEmptyObject() //判斷某個物件是否為空(不含有任何屬性)
$.isFunction() //判斷某個引數是否為函式
$.isPlainObject() //判斷某個引數是否為用"{}"或"new Object"建立的物件
$.support() //判斷瀏覽器是否支援某個特性
複製程式碼