Jquery小結

thomaszhou發表於2018-04-04

雖然現在MVVM框架盛行,但是難免有時候一些時候操作dom時,jquery帶來的相容性大大提高了我們的效率,所以那就作為平常需要的時候緊急去查詢,總結了一些常用的寫法,對於第一次接觸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");    &emsp;&emsp;//為所有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();    &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; //返回p元素的html內容(匹配第一個)
// 當該方法用於設定內容時,則重寫所有匹配元素的內容。
$("p").html("Hello <b>nick</b>!");  //設定p元素的html內容
複製程式碼

提示:如需設定或返回被選元素的 innerHTML(文字 + HTML 標記),請使用 html() 方法。

//特性同html
$("input").val();    &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; //獲取文字框中的值(匹配第一個)
$("input").val("nick");     &emsp;&emsp;&emsp;&emsp; //設定文字框中的內容
複製程式碼

注意:val() 方法通常與 HTML 表單元素一起使用。

// 當該方法用於返回內容時,則返回**(所有)**匹配元素的文字內容(會刪除 HTML 標記)。
$('p').text();    &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; //返回p元素的文字內容(匹配所有!!!!!)
// 返回的是字串形式

// 當該方法用於設定內容時,則重寫所有匹配元素的內容。
$("p").text("nick");    &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;//設定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");    &emsp;   //將所有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();    &emsp;&emsp;//克隆元素並選中克隆的副本
$("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();    &emsp;&emsp;//單擊事件
$("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()    &emsp;//當滑鼠指標從元素及其子元素上移開時觸發事件
$("p").mouseleave()    &emsp;//當滑鼠指標從元素上移開時觸發事件(與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 &emsp; //事件發生時,滑鼠距離網頁左上角的水平距離
event.pageY &emsp; //事件發生時,滑鼠距離網頁左上角的垂直距離
event.type &emsp;&emsp;//事件的型別
event.which &emsp; //按下了哪一個鍵
event.data &emsp;&emsp;//在事件物件上繫結資料,然後傳入事件處理函式
event.target &emsp;//性返回哪個 DOM 元素觸發了事件。

//阻止事件的預設行為(比如點選連結,會自動開啟新頁面\當點選提交按鈕時阻止對錶單的提交\)
event.preventDefault() &emsp;
event.stopPropagation()  //停止事件向上層元素冒泡
複製程式碼

提示:請使用event.isDefaultPrevented() 方法來檢查指定的事件上是否呼叫了 preventDefault() 方法

示:請使用 event.isPropagationStopped() 方法來檢查指定的事件上是否呼叫了stopPropagation方法

四、jQuery 效果 方法

(1) 基本

//
$("p").show()    &emsp;&emsp;&emsp;&emsp;//顯示隱藏的匹配元素
$("p").show("slow");    //參數列示速度,("slow","normal","fast")
$("p").show(1000);      //也可為設定毫秒
// 當隱藏/顯示元素時,如何使用 callback 引數。
$("p").show(1000,function(){
	alert("Show()方法已完成!");
});

// hide() 和 show() 用法相同
$("p").hide()    &emsp;&emsp;&emsp;&emsp;//隱藏顯示的元素

$("p").toggle();   &emsp;&emsp; //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");    &emsp;//用900毫秒時間將段落滑上

$("p").slideToggle("900");  //用900毫秒時間將段落滑上,滑下
複製程式碼

(3) 淡入淡出-相當於以淡入淡出的方式實現show()和hide()、toggle()

speed(("slow","normal","fast",毫秒數),callback引數和show(),hide()方法一樣

$("p").fadeIn("900");    &emsp;&emsp;  //用900毫秒時間將段落淡入
$("p").fadeOut("900");    &emsp;&emsp; //用900毫秒時間將段落淡出

$("p").fadeToggle("900");    &emsp;//用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) &emsp;&emsp;//去除字串兩端的空格

$("li").each(function(){ // 輸出每個 <li> 元素的文字
    alert($(this).text())
}); &emsp;&emsp;

$.inArray( "John", arr )  //返回值John在陣列arr中的索引位置,不存在返回-1  
$.grep() &emsp; //返回陣列中符合某種標準的元素
$.extend()  //將多個物件,合併到第一個物件
$.makeArray() //將物件轉化為陣列
$.type()    //判斷物件的類別(函式物件、日期物件、陣列物件、正則物件等等
$.isArray() //判斷某個引數是否為陣列
$.isEmptyObject() //判斷某個物件是否為空(不含有任何屬性)
$.isFunction()    //判斷某個引數是否為函式
$.isPlainObject() //判斷某個引數是否為用"{}""new Object"建立的物件
$.support()       //判斷瀏覽器是否支援某個特性
複製程式碼

相關文章