前端之jquery函式庫
jquery介紹
jQuery是目前使用最廣泛的javascript函式庫。據統計,全世界排名前100萬的網站,有46%使用jQuery,遠遠超過其他庫。微軟公司甚至把jQuery作為他們的官方庫。
jQuery的版本分為1.x系列和2.x、3.x系列,1.x系列相容低版本的瀏覽器,2.x、3.x系列放棄支援低版本瀏覽器,目前使用最多的是1.x系列的。
jquery是一個函式庫,一個js檔案,頁面用script標籤引入這個js檔案就可以使用。
<script type="text/javascript" src="js/jquery-1.12.2.js"></script>
jquery的口號和願望 Write Less, Do More(寫得少,做得多)
1、http://jquery.com/ 官方網站
2、https://code.jquery.com/ 版本下載
jquery文件載入完再執行
將獲取元素的語句寫到頁面頭部,會因為元素還沒有載入而出錯,jquery提供了ready方法解決這個問題,它的速度比原生的 window.onload 更快。
<script type="text/javascript"> $(document).ready(function(){ ...... }); </script>
可以簡寫為:
<script type="text/javascript"> $(function(){ ...... }); </script>
jquery選擇器
jquery用法思想一
選擇某個網頁元素,然後對它進行某種操作
jquery選擇器
jquery選擇器可以快速地選擇元素,選擇規則和css樣式相同,使用length屬性判斷是否選擇成功。
$(`#myId`) //選擇id為myId的網頁元素 $(`.myClass`) // 選擇class為myClass的元素 $(`li`) //選擇所有的li元素 $(`#ul1 li span`) //選擇id為為ul1元素下的所有li下的span元素 $(`input[name=first]`) // 選擇name屬性等於first的input元素
對選擇集進行過濾
$(`div`).has(`p`); // 選擇包含p元素的div元素 $(`div`).not(`.myClass`); //選擇class不等於myClass的div元素 $(`div`).eq(5); //選擇第6個div元素
選擇集轉移
$(`#box`).prev(); //選擇id是box的元素前面緊挨的同輩元素 $(`#box`).prevAll(); //選擇id是box的元素之前所有的同輩元素 $(`#box`).next(); //選擇id是box的元素後面緊挨的同輩元素 $(`#box`).nextAll(); //選擇id是box的元素後面所有的同輩元素 $(`#box`).parent(); //選擇id是box的元素的父元素 $(`#box`).children(); //選擇id是box的元素的所有子元素 $(`#box`).siblings(); //選擇id是box的元素的同級元素 $(`#box`).find(`.myClass`); //選擇id是box的元素內的class等於myClass的元素
判斷是否選擇到了元素
jquery有容錯機制,即使沒有找到元素,也不會出錯,可以用length屬性來判斷是否找到了元素,length等於0,就是沒選擇到元素,length大於0,就是選擇到了元素。
var $div1 = $(`#div1`); var $div2 = $(`#div2`); alert($div1.length); // 彈出1 alert($div2.length); // 彈出0 ...... <div id="div1">這是一個div</div>
jquery樣式操作
jquery用法思想二
同一個函式完成取值和賦值
操作行間樣式
// 獲取div的樣式 $("div").css("width"); $("div").css("color"); //設定div的樣式 $("div").css("width","30px"); $("div").css("height","30px"); $("div").css({fontSize:"30px",color:"red"});
特別注意
選擇器獲取的多個元素,獲取資訊獲取的是第一個,比如:$(“div”).css(“width”),獲取的是第一個div的width。
操作樣式類名
$("#div1").addClass("divClass2") //為id為div1的物件追加樣式divClass2 $("#div1").removeClass("divClass") //移除id為div1的物件的class名為divClass的樣式 $("#div1").removeClass("divClass divClass2") //移除多個樣式 $("#div1").toggleClass("anotherClass") //重複切換anotherClass樣式
繫結click事件
給元素繫結click事件,可以用如下方法:
$(`#btn1`).click(function(){ // 內部的this指的是原生物件 // 使用jquery物件用 $(this) })
獲取元素的索引值
有時候需要獲得匹配元素相對於其同胞元素的索引位置,此時可以用index()方法獲取
var $li = $(`.list li`).eq(1); alert($li.index()); // 彈出1 ...... <ul class="list"> <li>1</li> <li>2</li> <li>4</li> <li>5</li> <li>6</li> </ul>
jquery動畫
通過animate方法可以設定元素某屬性值上的動畫,可以設定一個或多個屬性值,動畫執行完成後會執行一個函式。
/* animate引數: 引數一:要改變的樣式屬性值,寫成字典的形式 引數二:動畫持續的時間,單位為毫秒,一般不寫單位 引數三:動畫曲線,預設為‘swing’,緩衝運動,還可以設定為‘linear’,勻速運動 引數四:動畫回撥函式,動畫完成後執行的匿名函式 */ $(`#div1`).animate({ width:300, height:300 },1000,`swing`,function(){ alert(`done!`); });
jquery特殊效果
fadeIn() 淡入 $btn.click(function(){ $(`#div1`).fadeIn(1000,`swing`,function(){ alert(`done!`); }); }); fadeOut() 淡出 fadeToggle() 切換淡入淡出 hide() 隱藏元素 show() 顯示元素 toggle() 切換元素的可見狀態 slideDown() 向下展開 slideUp() 向上捲起 slideToggle() 依次展開或捲起某個元素
jquery鏈式呼叫
jquery物件的方法會在執行完後返回這個jquery物件,所有jquery物件的方法可以連起來寫:
$(`#div1`) // id為div1的元素 .children(`ul`) //該元素下面的ul子元素 .slideDown(`fast`) //高度從零變到實際高度來顯示ul元素 .parent() //跳到ul的父元素,也就是id為div1的元素 .siblings() //跳到div1元素平級的所有兄弟元素 .children(`ul`) //這些兄弟元素中的ul子元素 .slideUp(`fast`); //高度實際高度變換到零來隱藏ul元素
jquery屬性操作
1、html() 取出或設定html內容
// 取出html內容 var $htm = $(`#div1`).html(); // 設定html內容 $(`#div1`).html(`<span>新增文字</span>`);
2、prop() 取出或設定某個屬性的值
// 取出圖片的地址 var $src = $(`#img1`).prop(`src`); // 設定圖片的地址和alt屬性 $(`#img1`).prop({src: "test.jpg", alt: "Test Image" });
jquery迴圈
對jquery選擇的物件集合分別進行操作,需要用到jquery迴圈操作,此時可以用物件上的each方法:
$(function(){ $(`.list li`).each(function(){ $(this).html( $(this).index() ); }) }) ...... <ul class="list"> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul>
jquery事件
事件函式列表:
blur() 元素失去焦點 focus() 元素獲得焦點 click() 滑鼠單擊 mouseover() 滑鼠進入(進入子元素也觸發) mouseout() 滑鼠離開(離開子元素也觸發) mouseenter() 滑鼠進入(進入子元素不觸發) mouseleave() 滑鼠離開(離開子元素不觸發) hover() 同時為mouseenter和mouseleave事件指定處理函式 ready() DOM載入完成 submit() 使用者遞交表單
表單驗證
1、什麼是正規表示式:
能讓計算機讀懂的字串匹配規則。
2、正規表示式的寫法:
var re=new RegExp(`規則`, `可選引數`);
var re=/規則/引數;
3、規則中的字元
1)普通字元匹配:
如:/a/ 匹配字元 ‘a’,/a,b/ 匹配字元 ‘a,b’
2)轉義字元匹配:
d 匹配一個數字,即0-9
D 匹配一個非數字,即除了0-9
w 匹配一個單詞字元(字母、數字、下劃線)
W 匹配任何非單詞字元。等價於[^A-Za-z0-9_]
s 匹配一個空白符
S 匹配一個非空白符
匹配單詞邊界
B 匹配非單詞邊界
. 匹配一個任意字元
var sTr01 = `123456asdf`; var re01 = /d+/; //匹配純數字字串 var re02 = /^d+$/; alert(re01.test(sTr01)); //彈出true alert(re02.test(sTr01)); //彈出false
4、量詞:對左邊的匹配字元定義個數
? 出現零次或一次(最多出現一次)
+ 出現一次或多次(至少出現一次)
* 出現零次或多次(任意次)
{n} 出現n次
{n,m} 出現n到m次
{n,} 至少出現n次
5、任意一個或者範圍
[abc123] : 匹配‘abc123’中的任意一個字元
[a-z0-9] : 匹配a到z或者0到9中的任意一個字元
6、限制開頭結尾
^ 以緊挨的元素開頭
$ 以緊挨的元素結尾
7、修飾引數:
g: global,全文搜尋,預設搜尋到第一個結果接停止
i: ingore case,忽略大小寫,預設大小寫敏感
8、常用函式
test
用法:正則.test(字串) 匹配成功,就返回真,否則就返回假
正則預設規則
匹配成功就結束,不會繼續匹配,區分大小寫
常用正則規則
//使用者名稱驗證:(數字字母或下劃線6到20位) var reUser = /^w{6,20}$/; //郵箱驗證: var reMail = /^[a-z0-9][w.-]*@[a-z0-9-]+(.[a-z]{2,5}){1,2}$/i; //密碼驗證: var rePass = /^[w!@#$%^&*]{6,20}$/; //手機號碼驗證: var rePhone = /^1[34578]d{9}$/;
事件冒泡
什麼是事件冒泡
在一個物件上觸發某類事件(比如單擊onclick事件),如果此物件定義了此事件的處理程式,那麼此事件就會呼叫這個處理程式,如果沒有定義此事件處理程式或者事件返回true,那麼這個事件會向這個物件的父級物件傳播,從裡到外,直至它被處理(父級物件所有同類事件都將被啟用),或者它到達了物件層次的最頂層,即document物件(有些瀏覽器是window)。
事件冒泡的作用
事件冒泡允許多個操作被集中處理(把事件處理器新增到一個父級元素上,避免把事件處理器新增到多個子級元素上),它還可以讓你在物件層的不同級別捕獲事件。
阻止事件冒泡
事件冒泡機制有時候是不需要的,需要阻止掉,通過 event.stopPropagation() 來阻止
$(function(){ var $box1 = $(`.father`); var $box2 = $(`.son`); var $box3 = $(`.grandson`); $box1.click(function() { alert(`father`); }); $box2.click(function() { alert(`son`); }); $box3.click(function(event) { alert(`grandson`); event.stopPropagation(); }); $(document).click(function(event) { alert(`grandfather`); }); }) ...... <div class="father"> <div class="son"> <div class="grandson"></div> </div> </div>
阻止預設行為
阻止表單提交
$(`#form1`).submit(function(event){ event.preventDefault(); })
合併阻止操作
實際開發中,一般把阻止冒泡和阻止預設行為合併起來寫,合併寫法可以用
// event.stopPropagation(); // event.preventDefault(); // 合併寫法: return false;
事件委託
事件委託就是利用冒泡的原理,把事件加到父級上,通過判斷事件來源的子集,執行相應的操作,事件委託首先可以極大減少事件繫結次數,提高效能;其次可以讓新加入的子元素也可以擁有相同的操作。
一般繫結事件的寫法
$(function(){ $ali = $(`#list li`); $ali.click(function() { $(this).css({background:`red`}); }); }) ... <ul id="list"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul>
事件委託的寫法
$(function(){ $list = $(`#list`); $list.delegate(`li`, `click`, function() { $(this).css({background:`red`}); }); }) ... <ul id="list"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul>
Dom操作
元素節點操作指的是改變html的標籤結構,它有兩種情況:
1、移動現有標籤的位置
2、將新建立的標籤插入到現有的標籤中
建立新標籤
var $div = $(`<div>`); //建立一個空的div var $div2 = $(`<div>這是一個div元素</div>`);
移動或者插入標籤的方法
1、append()和appendTo():在現存元素的內部,從後面放入元素
var $span = $(`<span>這是一個span元素</span>`); $(`#div1`).append($span); ...... <div id="div1"></div>
2、prepend()和prependTo():在現存元素的內部,從前面放入元素
3、after()和insertAfter():在現存元素的外部,從後面放入元素
4、before()和insertBefore():在現存元素的外部,從前面放入元素
刪除標籤
$(`#div1`).remove();
javascript物件
javascript中的物件,可以理解成是一個鍵值對的集合,鍵是呼叫每個值的名稱,值可以是基本變數,還可以是函式和物件。
建立javascript物件有兩種方法,一種是通過頂級Object類來例項化一個物件,然後在物件上面新增屬性和方法:
var person = new Object(); // 新增屬性: person.name = `tom`; person.age = `25`; // 新增方法: person.sayName = function(){ alert(this.name); } // 呼叫屬性和方法: alert(person.age); person.sayName();
還可以通過物件直接量的方式建立物件:
var person2 = { name:`Rose`, age: 18, sayName:function(){ alert(`My name is` + this.name); } } // 呼叫屬性和方法: alert(person2.age); person2.sayName();
json
json是 JavaScript Object Notation 的首字母縮寫,單詞的意思是javascript物件表示法,這裡說的json指的是類似於javascript物件的一種資料格式物件,目前這種資料格式比較流行,逐漸替換掉了傳統的xml資料格式。
json資料物件類似於JavaScript中的物件,但是它的鍵對應的值裡面是沒有函式方法的,值可以是普通變數,不支援undefined,值還可以是陣列或者json物件。
與JavaScript物件寫法不同的是,json物件的屬性名稱和字串值需要用雙引號引起來,用單引號或者不用引號會導致讀取資料錯誤。
json格式的資料:
{ "name":"tom", "age":18 }
json的另外一個資料格式是陣列,和javascript中的陣列字面量相同。
["tom",18,"programmer"]
還可以是更復雜的資料機構:
{ "name":"jack", "age":29, "hobby":["reading","travel","photography"] "school":{ "name":"Merrimack College", "location":`North Andover, MA` } }
ajax與jsonp
ajax技術的目的是讓javascript傳送http請求,與後臺通訊,獲取資料和資訊。ajax技術的原理是例項化xmlhttp物件,使用此物件與後臺通訊。ajax通訊的過程不會影響後續javascript的執行,從而實現非同步。
同步和非同步
現實生活中,同步指的是同時做幾件事情,非同步指的是做完一件事後再做另外一件事,程式中的同步和非同步是把現實生活中的概念對調,也就是程式中的非同步指的是現實生活中的同步,程式中的同步指的是現實生活中的非同步。
區域性重新整理和無重新整理
ajax可以實現區域性重新整理,也叫做無重新整理,無重新整理指的是整個頁面不重新整理,只是區域性重新整理,ajax可以自己傳送http請求,不用通過瀏覽器的位址列,所以頁面整體不會重新整理,ajax獲取到後臺資料,更新頁面顯示資料的部分,就做到了頁面區域性重新整理。
資料介面
資料介面是後臺程式提供的,它是一個url地址,訪問這個地址,會對資料進行增、刪、改、查的操作,最終會返回json格式的資料或者操作資訊,格式也可以是text、xml等。
$.ajax使用方法
常用引數:
1、url 請求地址
2、type 請求方式,預設是`GET`,常用的還有`POST`
3、dataType 設定返回的資料格式,常用的是`json`格式,也可以設定為`html`
4、data 設定傳送給伺服器的資料
5、success 設定請求成功後的回撥函式
6、error 設定請求失敗後的回撥函式
7、async 設定是否非同步,預設值是`true`,表示非同步
以前的寫法:
$.ajax({ url: `/change_data`, type: `GET`, dataType: `json`, data:{`code`:300268} success:function(dat){ alert(dat.name); }, error:function(){ alert(`伺服器超時,請重試!`); } });
新的寫法(推薦):
$.ajax({ url: `/change_data`, type: `GET`, dataType: `json`, data:{`code`:300268} }) .done(function(dat) { alert(dat.name); }) .fail(function() { alert(`伺服器超時,請重試!`); });
$.ajax的簡寫方式
$.ajax按照請求方式可以簡寫成$.get或者$.post方式
$.get("/change_data", {`code`:300268}, function(dat){ alert(dat.name); }); $.post("/change_data", {`code`:300268}, function(dat){ alert(dat.name); });
同源策略
ajax請求的頁面或資源只能是同一個域下面的資源,不能是其他域的資源,這是在設計ajax時基於安全的考慮。特徵報錯提示:
XMLHttpRequest cannot load https://www.baidu.com/. No `Access-Control-Allow-Origin` header is present on the requested resource. Origin `null` is therefore not allowed access.
jsonp
ajax只能請求同一個域下的資料或資源,有時候需要跨域請求資料,就需要用到jsonp技術,jsonp可以跨域請求資料,它的原理主要是利用了<script>標籤可以跨域連結資源的特性。jsonp和ajax原理完全不一樣,不過jquery將它們封裝成同一個函式。
獲取360搜尋關鍵詞聯想資料
$(function(){ $(`#txt01`).keyup(function(){ var sVal = $(this).val(); $.ajax({ url:`https://sug.so.360.cn/suggest?`, type:`get`, dataType:`jsonp`, data: {word: sVal} }) .done(function(data){ var aData = data.s; $(`.list`).empty(); for(var i=0;i<aData.length;i++) { var $li = $(`<li>`+ aData[i] +`</li>`); $li.appendTo($(`.list`)); } }) }) }) //...... <input type="text" name="" id="txt01"> <ul class="list"></ul>
一般ajax資料介面和jsonp資料介面的區別
開發返回資料的介面,如果是一般的ajax介面,讓介面直接返回json格式的資料字串就可以了,這種介面的資料是不能跨域請求的,如果要跨域請求資料,需要開發jsonp的介面,開發jsonp的介面,需要獲取請求地址中的引數,也就是`callback`鍵對應的值,然後將這個值和json資料拼裝成一個函式呼叫的形式的字串返回,就完成了一個jsonp的介面,這個鍵值對是由$.ajax函式自動產生的。比如:`callback`鍵對應的值一般是這樣的:jQuery1124018787969015631711_1522330257607,所以:
- 一般介面返回的資料形式:`{“iNum”:12,`sTr`:`abc`}`;
- jsonp返回的資料形式:`jQuery1124018787969015631711_1522330257607({“iNum”:12,”sTr”:”abc”})`;
——- 知識無價,汗水有情,如需搬運請註明出處,謝謝!
相關文章
- 前端函式式功能庫前端函式
- jQuery屬性操作之.val()函式jQuery函式
- Jquery庫的一些可用函式jQuery函式
- 前端之jQuery前端jQuery
- jQuery常用函式jQuery函式
- jQuery功能函式jQuery函式
- jQuery使用最廣泛的javascript函式庫jQueryJavaScript函式
- 前端之函式柯里化Currying前端函式
- jQuery的each函式jQuery函式
- jQuery.extenda函式jQuery函式
- Django筆記二十七之資料庫函式之文字函式Django筆記資料庫函式
- 【資料庫之函式依賴】資料庫函式
- 前端Vue:函式式元件前端Vue函式元件
- jquery position()函式和offset()函式的區別jQuery函式
- 開開森森學前端之函式式元件和JSX前端函式元件JS
- 如何理解jQuery.on()函式jQuery函式
- 前端基礎之jQuery引入前端jQuery
- 前端學習之PHP基礎函式總結前端PHP函式
- jquery的$.each()函式和$.map()函式的區別jQuery函式
- jQuery函式的等價原生函式程式碼示例jQuery函式
- 前端 help 助手函式前端函式
- 前端入門——函式前端函式
- 前端筆記之jQuery(上)載入函式的區別&物件&操作HTML/CSS&動畫&選擇器前端筆記jQuery函式物件HTMLCSS動畫
- 字串函式之Strtok()函式字串函式
- Django筆記二十五之資料庫函式之日期函式Django筆記資料庫函式
- 微信UI設計之WeUI前端樣式庫UI前端
- 在jQuery定義自己函式jQuery函式
- 05_jQuery函式的使用jQuery函式
- jquery函式$.proxy簡單示例jQuery函式
- PHP 函式庫 1 - 函式庫的分類PHP函式
- 《前端之路》之 JavaScript 高階技巧、高階函式(一)前端JavaScript函式
- 前端基礎之jQuery進階前端jQuery
- 前端基礎之jQuery基礎前端jQuery
- PHP 函式庫精講之類與物件PHP函式物件
- AT&T彙編之使用C庫函式函式
- 資料庫之DQL排序&分組&函式資料庫排序函式
- 前端常用函式封裝前端函式封裝
- 前端基礎(三):函式前端函式