jQuery是一個快速、簡潔的JavaScript框架,它讓我們的程式碼變得更簡捷,大大減少了我們的工作量,今天就來簡單學習一下有關jQuery的語法和基礎操作 ↓↓↓
NO.1 jQuery語法基礎
1、使用JQuery必須先匯入jquery.x.x.x.js檔案。
<script src=”js/jquery-3.1.1.js”></script>
2、JQuery中的選擇器:
$(“選擇器名稱”).函式名();
!!!注意:$是jQuery的縮寫,也就是說,選擇器可以使用 jQuery(“:input”)
3、JQuery 文件就緒函式:
$(document).ready(function(){
// JQuery程式碼
console.log(jQuery(":input:disabled"));
});
簡寫形式:$(function(){});
【JQuery文件就緒函式與window.onload的區別】
① window.onload必須等待網頁資源(包括圖片等)全部載入完成後,才能執行;
文件就緒函式只需等到網頁DOM結構載入完成後,即可執行。
② window.onload在一個頁面中,只能寫一次;
文件就緒函式在一個頁面中,可以有N個。
4、JS物件和jQuery物件:
① 使用$(“”)取到的節點為jQuery物件,只能呼叫JQuery方法,不能呼叫原生JS方法。
$("#div").click(function(){}); // √
$("#div").onclick = function(){}; // × JQuery物件不能呼叫原生JS方法
② 同理,使用getElement系列函式取到的為JS物件,也不能呼叫JQuery函式。
【jQuery物件與JS物件的相互轉換】
① jQuery轉JS:使用.get(index) 或 [index] 選中的就是JS物件;
$("div").get(0).onclick = function(){}
或 $("#div1")[0].onclick = function(){}
② JS轉jQuery:使用$()包裹JS物件。
var div = document.getElementsByTagName("div");
$(div).click(function(){});
5、解決jQuery多庫衝突問題:
頁面中如果同時引入多個JS框架,可能導致$衝突。
解決辦法:
① 使用jQuery.noConflict();使用JQuery放棄在全域性中使用$;
② 使用jQuery關鍵字替代$,或者使用一個自執行函式:
!function($){ // 在自執行函式中,可以使用$替代jQuery // 除自執行函式外的其他區域,禁止jQuery使用$ }(jQuery);
程式碼示例:
jQuery.noConflict();
!function($){
$(function(){
// JS轉JQuery
var div = document.getElementsByTagName("div");
$(div).click(function(){
alert(1);
});
// JQuery轉JS
$("div").get(0).onclick = function(){
alert(1);
}
});
}(jQuery);
NO.2 jQuery文件處理
一、JQuery中的DOM操作
1、內部最後面新增
append:在div1的內部,最後追加一個圖片(在A中新增b)
$(“#div1”).append(“<img src=`../01-HTML基本標籤/img/QQ圖片1.gif`/>”);
appendTo:把一個圖片追加到div1的內部最後(將b新增到A中)
$(“<img src=`../01-HTML基本標籤/img/QQ圖片2.gif`/>”).appendTo(“#div1”);
2、內部最前方插入
prepend:
$(“#div1”).prepend(“<img src=`../01-HTML基本標籤/img/QQ圖片1.gif`/>”);
prependTo:
$(“<img src=`../01-HTML基本標籤/img/QQ圖片2.gif`/>”).prependTo(“#div1”);
3、在div1的外部,後面插入節點
after:
$(“#div1”).after(“<p>這是一個p</p>”);
insertAfter:
$(“<p>11111</p>”).insertAfter(“#div1”);
4、在div1的外部,前面插入節點
before:
$(“#div1”).before(“<p>這是一個p</p>”);
insertBefore:
$(“<p>11111</p>”).insertBefore(“#div1”);
用JS新增:
var div1 = document.getElementById("div1");
var first = div1.firstChild;
var p = document.createElement("p");
p.innerText = "123";
div1.appendChild(p);
div1.insertBefore(p,first);
document.body.insertBefore(p,div1);
5、為每一個選中的節點,都套一層父節點。
wrap:
$(“div”).wrap(“<section></section>”);
wrapAll:
$(“div”).wrapAll(“<section></section>”);
6、將選中的所有節點,包裹在同一個父節點中
wrapAll:
$(“p”).wrapAll(“<section></section>”); // ×
$(“div~p”).wrapAll(“<section></section>”);
7、刪除選中節點的父節點
unwrap:
$(“#div1 p”).unwrap();
8、將選中節點中的所有子元素,包裹在一個新的父節點中;
新的父節點依然是當前元素的唯一子節點
wrapInner:
$(“#div1”).wrapInner(“<div></div>”);
9、將所有選中的節點,重新替換為新的節點
replaceWith:
$(“div p”).replaceWith(“<span>1</span>”);
replaceAll:
$(“<span>1</span>”).replaceAll(“div p”);
只替換標籤:
$("div p").wrapInner("<span></span>");
$("div p>span").unwrap();
10、empty:清空當前節點內容,但會保留當前節點標籤
$(“#div1”).empty();
remove:刪除當前節點,以及當前節點的所有子節點
$(“#div1”).remove();
detach:刪除當前節點,以及當前節點的所有子節點
$(“#div1”).detach();
【remove和detach的區別】
① 使用remove刪除的節點,如果恢復以後,將不再保留節點所繫結的事件; ② 使用detach刪除的節點,在節點恢復以後,可以恢復節點之前所繫結的事件。 案例:↓ $("#div1").click(function(){ alert(123); }); var div1 = null; $("button:eq(0)").click(function(){ div1 = $("#div1").remove(); }); $("button:eq(1)").click(function(){ div1 = $("#div1").detach(); }); $("button:eq(2)").click(function(){ $("#div2").before(div1); });
11、clone:克隆
$(“#div1”).clone(true).empty().insertBefore(“button:eq(0)”);
JS中cloneNode() 與 JQuery中clone() 區別:
cloneNode() |
a. 如果不傳引數或者引數傳入false,表示只克隆當前節點,不克隆子節點; b. 如果引數傳入true,表示克隆當前節點以及所有子節點。 |
clone() |
a. 無論傳入true還是false都會克隆當前節點以及所有子節點; b. 傳入true表示克隆節點的同時將包括節點所繫結的事件; c. 否則,只表示克隆節點,而不克隆繫結的事件。 |
二、CSS和屬性操作
1、設定節點的屬性
$(“#div1”).attr(“class”,”cls”);
2、傳入物件,以鍵值對的形式同時設定多對屬性
$("#div1").attr({
"class":$("#div1").attr("class")+"cls1",
"name":"name1",
"style":"font-size:24px;color:blue"
});
3、取到節點的屬性
console.log($(“#div1”).attr(“id”));
4、刪除節點屬性
$(“#div1”).removeAttr(“class”);
5、prop 和 attr一樣,都可以對節點屬性進行讀取和設定
【兩者的不同】
在讀取 屬性名=”屬性值” 的屬性時,attr將返回屬性值和undefined;而prop將返回true或false;
也就是說,attr要取到的屬性,必須是在標籤上已經寫明的屬性,否則無法取到。
6、在原有class的基礎上,新增class名字
$(“#div1”).addClass(“cls1”);
7、 刪除指定的class名稱,其餘未刪除的class名,依然保留
$(“#div1”).removeClass(“cls cls1”);
8、 toggleClass 切換class:如果有指定class就刪除,如果沒有就新增。
$("button:eq(0)").click(function(){
$("#div1").toggleClass("div1");
});
9、.html:取到或設定節點中的html程式碼;
.text:取到或設定節點中的文字;
.val:取到或設定表單元素的value值;
console.log($("#div1").html("<p>11111</p>").html()); console.log($("#div1").text("<p>11111</p>").text()); console.log($("input:eq(1)").val("<p>11111</p>").val());
10、.css():給節點新增css樣式,屬於行級樣式表許可權
$(“#div1”).css(“color”,”green”);
同時給一個節點新增多對css樣式
$("#div1").css({
"color":"yellow",
"font-size":"24px"
});
通過回撥函式返回值,修改css樣式: 修改div的寬
$("button:eq(0)").click(function(){
var id = setInterval(function(){
$("#div1").css({
"width":function(index,value){
var v = parseFloat(value) +1;
if(v>600){
clearInterval(id);
}
return v + "px";
}
});
},10);
});
11、取到或者設定節點的寬高
console.log($(“#div1”).height(400));
console.log($(“#div1”).width(“400px”));
12、取到節點的寬度+padding,不包含border和margin
console.log($(“#div1”).innerHeight());
console.log($(“#div1”).innerWidth());
13、不傳引數,表示 寬高+padding+border
console.log($(“div1”).outerHeight());
傳入true,表示 寬高+padding+border+margin
console.log($(“div1”).outerWidth(true));
14、返回一個節點,相對於瀏覽器左上角的偏移量
返回一個物件{top: 31, left: 8}
此方法,測量時,會將margin算作偏移量的距離
console.log($(“#div1”).offset());
15、 返回一個節點,相對於父容器的偏移量
注意:
① 使用此方法,要求父元素必須是定位元素,如果父元素不是定位元素,則依然是相對於瀏覽器左上角測量
② 此方法,測量偏移量時,將不考慮margin,而會將margin視為當前容器的一部分
console.log($(“#div1”).position());
16、scrollTop:、設定或取到指定節點的滾動條位置
console.log($(“#div1”).scrollTop(100));
關於jQuery的基礎語法和操作就簡單介紹到這裡… …