jQuery的優勢
- DOM操作方便。
- 解決了瀏覽器的相容性問題:(瀏覽器寬高,event,監聽等)
學習路線
- 常用方法
- 高階方法
- 熟練使用
- 理解原理
安裝方式
- download到本地
- npm/yarn 包管理
- 引入CDN
獲取DOM
- 與CSS選擇器比較類似,選擇的是一個類陣列,
$('div')[0]
才代表DOM元素;
- 注意區分DOM物件和jQuery物件,例如:
$('this')
才是jQuery物件,才可以使用jQuery方法;
$('')
裡面可以放以下幾類東西:
- CSS選擇器
- 原生DOM,可以是一個陣列,也可以是單個DOM
- function,相當於
$(document).ready(function)
,自動執行函式,DOM文件解析完成後立即執行,解決了非同步問題
- null,返回空物件
文字屬性text,html和val
- text(): 取值賦值都是一組,拼接字串
- html(): 取值只取第一個,賦值賦一組
- val(): 取值只取第一個,賦值賦一組,主要用於表單元素
屬性attr和prop
- attr即attribute,既可以獲取和設定DOM固有的屬性(如:id/class/href 等) 也可以設定自定義的新增屬性:
$('div').attr('id'); //獲取id
$('div').attr('id', 'navbar'); //設定單個屬性
$('div').attr({ //傳入物件(鍵值對),設定多個屬性
id:'navbar',
age: '18'
})
複製程式碼
- prop即property,僅支援DOM固有屬性, 語法與attr一致;
- 刪除屬性:
removeAttr('id');
removeProp('age'); //不能刪除id/class等自帶屬性;
複製程式碼
- prop可以動態的獲取,attr不能動態的獲取
新增和刪除class
addClass('container')
支援鏈式操作,(一般設定類方法都會返回this)
removeClass('container')
hasClass('container')
不支援鏈式操作,返回布林值
toggleClass('container')
開關式操作
CSS樣式獲取和操作
$('div').css('width')
返回值是'100px'字串,而$('div').width
返回數值,獲取多個樣式時,可以傳陣列,返回值是物件;
$('div').css('width','100px')
設定樣式,如果設定多個樣式,可以傳入物件;
- 關於width:
$('div').width //content
$('div').innerWidth //content+padding
$('div').outerWidth //content+padding+border
$('div').outerWidth(ture) // content+padding+border+margin
複製程式碼
- 關於position:
$('div').offset() //相對於文件而言的位置,可以傳值{top:100px,left:100px}
$('div').position() //相對於父級(有定位的父級),不可以傳值
複製程式碼
- 關於scroll:
$(document).scrollTop();
$(document).scrollLeft();
複製程式碼
DOM篩選和遍歷
- 篩選方法
$('li').find('.container');
$('li:first'); //同樣用法還有last/odd/even/eq(2)
$('li').first(); //同樣用法還有last()/eq(2), 不包括odd/even
$('li:eq(2)').prev(); //返回上一個標籤,還有prevAll()/next()/nextAll()/siblings()
$('li').filter(function(index,ele){return true/false} //選取返回值為true的元素
$('li').not('.test');
$('li').is('.test'); //返回布林值
$('li').slice(2,4); //選取第二三號元素,取頭不取尾[start,stop)
複製程式碼
- each: 只是遍歷,返回的還是之前的DOM不做篩選
$('li').each(fucntion(index,ele){
var arr= [];
arr.push($(this).find('.name').text()); //find 方法查詢元素
}
arr.join(',');
複製程式碼
- map: 遍歷,並篩選DOM,返回篩選後的物件
$('li').map(fucntion(index,ele){
if($(ele).find('.age').text()>15)
return ele;
}
複製程式碼
$('li').has('p')
查詢有p子元素的li
jQuery 整體架構封裝思想
- 如何全域性使用jQuery:
window.jQuery=window.$=jQuery;
- 無new操作: 再套一層 init();
- 改變原型:
init.prototype = jQuery.prototype
- 鏈式操作:
return this;