亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery中的基本選擇器用法學習教程

2019-11-20 10:15:41
字體:
來源:轉載
供稿:網友

一.簡單選擇器
在使用jQuery 選擇器時,必須使用“$()”函數來包裝CSS 規則。而CSS 規則作為參數傳遞到jQuery 對象內部后,再返回包含頁面中對應元素的jQuery 對象。隨后,就可以對這個獲取到的DOM 節點進行行為操作了。

#box {//使用ID 選擇器的CSS 規則   color:red;//將ID 為box 的元素字體顏色變紅  } 

在jQuery 選擇器里,我們使用如下的方式獲取同樣的結果:

$('#box').css('color', 'red');//獲取DOM 節點對象,并添加行為 

那么除了ID 選擇器之外,還有兩種基本的選擇器,分別為:元素標簽名和類(class):

選擇器 CSS 模式 jQuery 模式 描述
元素名 div {}  $('div')  獲取所有div 元素的DOM 對象
ID #box {} $('#box')   獲取一個ID 為box 元素的DOM 對象
類(class) .box{}  $('.box')   獲取所有class 為box 的所有DOM 對象

$('#box').css('color', 'red');//獲取DOM 節點對象,并添加行為  $('div').css('color', 'red');//元素選擇器,返回多個元素  $('#box').css('color', 'red'); //ID 選擇器,返回單個元素  $('.box').css('color', 'red'); //類(class)選擇器,返回多個元素 

為了證明ID 返回的是單個元素,而元素標簽名和類(class)返回的是多個,可以采用jQuery 核心自帶的一個屬性length 或size()方法來查看返回的元素個數。

alert($('div').size());//3 個  alert($('#box').size()); //1 個,后面兩個失明了  alert($('.box').size());//3 個 

同理,也可以直接使用jQuery 核心屬性來操作:

alert($('#box').length);//1 個,后面失明了 

警告:有個問題特別要注意,ID 在頁面只允許出現一次,一般都是要求開發者要遵守和保持這個規則。但如果你在頁面中出現三次,并且在CSS 使用樣式,那么這三個元素還會執行效果。但如果,你想在jQuery 這么去做,那么就會遇到失明的問題。所以,開發者必須養成良好的遵守習慣,在一個頁面僅使用一個ID。

$('#box').css('color', 'red');//只有第一個ID 變紅,后面兩個失明 

jQuery 選擇器的寫法與CSS 選擇器十分類似,只不過功能不同。CSS 找到元素后添加的是單一的樣式,而jQuery 則添加的是動作行為。最重要的一點是:CSS 在添加樣式的時候,高級選擇器會對部分瀏覽器不兼容,而jQuery 選擇器在添加CSS 樣式的時候卻不必為此煩惱。

#box > p { //CSS 子選擇器,IE6 不支持   color:red;  }  $('#box > p').css('color','red'); //jQuery 子選擇器,兼容了IE6 

jQuery 選擇器支持CSS1、CSS2 的全部規則,支持CSS3 部分實用的規則,同時它還有少量獨有的規則。所以,對于已經掌握CSS 的開發人員,學習jQuery 選擇器幾乎是零成本。而jQuery 選擇器在獲取節點對象的時候不但簡單,還內置了容錯功能,這樣避免像JavaScript那樣每次對節點的獲取需要進行有效判斷。

$('#pox').css('color', 'red');//不存在ID 為pox 的元素,也不報錯  document.getElementById('pox').style.color = 'red';//報錯了 

因為jQuery 內部進行了判斷,而原生的DOM 節點獲取方法并沒有進行判斷,所以導致了一個錯誤,原生方法可以這么判斷解決這個問題:

if (document.getElementById('pox')) {//先判斷是否存在這個對象   document.getElementById('pox').style.color = 'red';  } 

那么對于缺失不存在的元素,使用jQuery 調用的話,怎么去判斷是否存在呢?因為本身返回的是jQuery 對象,可能會導致不存在元素存在與否,都會返回true。

if ($('#pox').length > 0) {//判斷元素包含數量即可   $('#pox').css('color', 'red');  } 

除了這種方式之外,還可以用轉換為DOM 對象的方式來判斷,例如:

if ($('#pox').get(0)) {} 或if ($('#pox')[0]) {} //通過數組下標也可以獲取DOM 對象 

二.進階選擇器
在簡單選擇器中,了解了最基本的三種選擇器:元素標簽名、ID 和類(class)。那么在基礎選擇器外,還有一些進階和高級的選擇器方便我們更精準的選擇元素。

選擇器 CSS 模式 jQuery 模式 描述
群組選擇器 span,em,.box {}  $('span,em,.box')  獲取多個選擇器的DOM 對象
后代選擇器 ul li a {} $('ul li a') 獲取追溯到的多個DOM 對象
通配選擇器 * {}  $('*')  獲取所有元素標簽的DOM 對象

//群組選擇器 span, em, .box {//多種選擇器添加紅色字體   color:red;  }  $('span, em, .box').css('color', 'red');//群組選擇器jQuery 方式  //后代選擇器 ul li a { //層層追溯到的元素添加紅色字體   color:red;  }  $('ul li a').css('color', 'red');//群組選擇器jQuery 方式  //通配選擇器 * { //頁面所有元素都添加紅色字體  color:red;  }  $('*').css('color', 'red'); //通配選擇器 

目前介紹的六種選擇器,在實際應用中,可以靈活的搭配,使得選擇器更加的精準和快速:

$('#box p, ul li *').css('color', 'red');//組合了多種選擇器 

警告:在實際使用上,通配選擇器一般用的并不多,尤其是在大通配上,比如:$('*'),這種使用方法效率很低,影響性能,建議竟可能少用。還有一種選擇器,可以在ID 和類(class)中指明元素前綴,比如:

$('div.box');//限定必須是.box 元素獲取必須是div  $('p#box div.side');//同上 

類(class)有一個特殊的模式,就是同一個DOM 節點可以聲明多個類(class)。那么對于這種格式,我們有多class 選擇器可以使用,但要注意和class 群組選擇器的區別。

.box.pox {//雙class 選擇器,IE6 出現異常   color:red;  }  $('.box.pox').css('color', 'red');//兼容IE6,解決了異常 

多class 選擇器是必須一個DOM 節點同時有多個class,用這多個class 進行精確限定。而群組class 選擇器,只不過是多個class 進行選擇而已。

$('.box, .pox').css('color', 'red');//加了逗號,體會區別 

警告:在構造選擇器時,有一個通用的優化原則:只追求必要的確定性。當選擇器篩選越復雜,jQuery 內部的選擇器引擎處理字符串的時間就越長。比如:

$('div#box ul li a#link');//讓jQuery 內部處理了不必要的字符串  $('#link'); //ID 是唯一性的,準確度不變,性能提升 


三.高級選擇器
在前面六種最常規的選擇器,一般來說通過這六種選擇器基本上可以解決所有DOM 節點對象選擇的問題。但在很多特殊的元素上,比如父子關系的元素,兄弟關系的元素,特殊屬性的元素等等。在早期CSS 的使用上,由于IE6 等低版本瀏覽器不支持,所以這些高級選擇器的使用也不具備普遍性,但隨著jQuery 兼容,這些選擇器的使用頻率也越
來越高。

層次選擇器
選擇器 CSS 模式 jQuery 模式 描述
后代選擇器 ul li a {}  $('ul li a')  獲取追溯到的多個DOM 對象
子選擇器 div > p {}  $('div p')  只獲取子類節點的多個DOM 對象
next 選擇器 div + p {}  $('div + p') 只獲取某節點后一個同級DOM 對象
nextAll 選擇器 div ~ p {}  $('div ~ p') 獲取某節點后面所有同級DOM 對象

在層次選擇器中,除了后代選擇器之外,其他三種高級選擇器是不支持IE6 的,而jQuery卻是兼容IE6 的。

//后代選擇器$('#box p').css('color', 'red');//全兼容 


jQuery 為后代選擇器提供了一個等價find()方法

$('#box').find('p').css('color', 'red');//和后代選擇器等價 //子選擇器,孫子后失明#box > p { //IE6 不支持   color:red;  }  $('#box > p').css('color', 'red'); //兼容IE6 

jQuery 為子選擇器提供了一個等價children()方法:

$('#box').children('p').css('color', 'red');//和子選擇器等價 //next 選擇器(下一個同級節點) #box + p {//IE6 不支持   color:red;  }  $('#box+p').css('color', 'red');//兼容IE6 

jQuery 為next 選擇器提供了一個等價的方法next():

$('#box').next('p').css('color', 'red');//和next 選擇器等價 //nextAll 選擇器(后面所有同級節點)#box ~ p { //IE6 不支持  color:red;  }  $('#box ~ p').css('color', 'red');//兼容IE6 

jQuery 為nextAll 選擇器提供了一個等價的方法nextAll():

$('#box').nextAll('p').css('color', 'red');//和nextAll 選擇器等價 

層次選擇器對節點的層次都是有要求的,比如子選擇器,只有子節點才可以被選擇到,孫子節點和重孫子節點都無法選擇到。next 和nextAll 選擇器,必須是同一個層次的后一個和后N 個,不在同一個層次就無法選取到了。在find()、next()、nextAll()和children()這四個方法中,如果不傳遞參數,就相當于傳遞了“*”,即任何節點,不建議這么做,不但影響性能,而且由于精準度不佳可能在復雜的HTML 結構時產生怪異的結果。

$('#box').next();//相當于$('#box').next('*'); 

為了補充高級選擇器的這三種模式,jQuery 還提供了更加豐富的方法來選擇元素:

$('#box').prev('p').css('color', 'red');//同級上一個元素  $('#box').prevAll('p').css('color', 'red');//同級所有上面的元素 

nextUntil()和prevUnitl()方法是選定同級的下面或上面的所有節點,選定非指定的所有元素,一旦遇到指定的元素就停止選定。

$('#box').prevUntil('p').css('color', 'red');//同級上非指定元素選定,遇到則停止  $('#box').nextUntil('p').css('color', 'red');//同級下非指定元素選定,遇到則停止 

siblings()方法正好集成了prevAll()和nextAll()兩個功能的效果,及上下相鄰的所有元素進行選定:

$('#box').siblings('p').css('color', 'red');//同級上下所有元素選定  //等價于下面:  $('#box').prevAll('p').css('color', 'red');//同級上所有元素選定  $('#box').nextAll('p').css('color', 'red'); //同級下所有元素選定 

警告:切不可寫成“$('#box').prevAll('p').nextAll('p').css('color', 'red');”這種形式,因為prevAll('p')返回的是已經上方所有指定元素,然后再nextAll('p')選定下方所有指定元素,這樣必然出現錯誤。理論上來講,jQuery 提供的方法find()、next()、nextAll()和children()運行速度要快于使用高級選擇器。因為他們實現的算法有所不同,高級選擇器是通過解析字符串來獲取節點對象,而jQuery 提供的方法一般都是單個選擇器,是可以直接獲取的。但這種快慢的差異,對于客戶端腳本來說沒有太大的實用性,并且速度的差異還要取決了瀏覽器和選擇的元素內容。比如,在IE6/7 不支持querySelectorAll()方法,則會使用“Sizzle”引擎,速度就會慢,而其他瀏覽器則會很快。有興趣的可以了解這個方法和這個引擎。選擇器快慢分析:

//這條最快,會使用原生的getElementById、ByName、ByTagName 和querySelectorAll()$('#box').find('p'); //jQuery 會自動把這條語句轉成$('#box').find('p'),這會導致一定的性能損失。它比最快的形式慢了5%-10%$('p', '#box'); //這條語句在jQuery 內部,會使用$.sibling()和javascript 的nextSibling()方法,一個個遍歷節點。它比最快的形式大約慢50%$('#box').children('p'); //jQuery 內部使用Sizzle 引擎,處理各種選擇器。Sizzle 引擎的選擇順序是從右到左,所以這條語句是先選p,然后再一個個過濾出父元素#box,這導致它比最快的形式大約慢70%$('#box > p'); //這條語句與上一條是同樣的情況。但是,上一條只選擇直接的子元素,這一條可以于選擇多級子元素,所以它的速度更慢,大概比最快的形式慢了77%。$('#box p'); //jQuery 內部會將這條語句轉成$('#box').find('p'),比最快的形式慢了23%。$('p', $('#parent')); 

綜上所屬,最快的是find()方法,最慢的是$('#box p')這種高級選擇器。如果一開始將$('#box')進行賦值,那么jQuery 就對其變量進行緩存,那么速度會進一步提高。

var box = $('#box');  var p = box.find('p'); 

注意:使用哪種方案呢?其實,使用哪種都差不多。這里,推薦使用jQuery 提供的方法。因為不但方法的速度比高級選擇器運行的更快,并且它的靈活性和擴展性要高于高級選擇器。使用“+”或“~”從字面上沒有next 和nextAll 更加語義化,更加清晰,jQuery 的方法更加豐富,提供了相對的prev 和prevAll。畢竟jQuery 是編程語言,需要
能夠靈活的拆分和組合選擇器,而使用CSS 模式過于死板。所以,如果jQuery 提供了獨立的方法來代替某些選擇器的功能,推薦優先使用獨立的方法。

屬性選擇器
CSS 模式 jQuery 模式 描述
a[title]  $('a[title]')  獲取具有這個屬性的DOM 對象
a[title=num1]  $('a[title=num1]')
獲取具有這個屬性=這個屬性值的DOM 對
a[title^=num]  $('a[title^=num]')
獲取具有這個屬性且開頭屬性值匹配的
DOM 對象
a[title|=num]  $('a[title|=num]')
獲取具有這個屬性且等于屬性值或開頭屬
性值匹配后面跟一個“-”號的DOM 對象
a[title$=num]  $('a[title$=num]')
獲取具有這個屬性且結尾屬性值匹配的
DOM 對象
a[title!=num]  $('a[title!=num]')
獲取具有這個屬性且不等于屬性值的
DOM 對象
a[title~=num]  $('a[title~=num]')
獲取具有這個屬性且屬性值是以一個空格
分割的列表,其中包含屬性值的DOM 對
a[title*=num]  $('a[title*=num]')
獲取具有這個屬性且屬性值含有一個指定
字串的DOM 對象
a[bbb][title=num1]  $('a[bbb][title=num1]')
獲取具有這個屬性且屬性值匹配的DOM
對象

屬性選擇器也不支持IE6,所以在CSS 界如果要兼容低版本,那么也是非主流。但jQuery卻不必考慮這個問題。

//選定這個屬性的 a[title] { //IE6 不支持   color:red;  }  $('a[title]').css('color', 'red');//兼容IE6 了 //選定具有這個屬性=這個屬性值的a[title=num1] {//IE6 不支持   color:red;  }  $('a[title=num1]').css('color', 'red');//兼容IE6 了 //選定具有這個屬性且開頭屬性值匹配的a[title^=num] { //IE6 不支持   color:red;  }  $('a[title=^num]').css('color', 'red'); //兼容IE6 了 //選定具有這個屬性且等于屬性值或開頭屬性值匹配后面跟一個“-”號a[title|=num] {//IE6 不支持   color:red;  }  $('a[title|="num"]').css('color', 'red');//兼容IE6 了 //選定具有這個屬性且結尾屬性值匹配的a[title$=num] {//IE6 不支持   color:red;  }  $('a[title$=num]').css('color','red'); //兼容IE6 了 //選定具有這個屬性且屬性值不想等的a[title!=num1] {//不支持此CSS 選擇器   color:red;  }  $('a[title!=num1]').css('color','red');//jQuery 支持這種寫法 //選定具有這個屬性且屬性值是以一個空格分割的列表,其中包含屬性值的a[title~=num] {//IE6 不支持   color:red;  }  $('a[title~=num1]').css('color','red'); //兼容IE6 //選定具有這個屬性且屬性值含有一個指定字串的a[title*=num] {//IE6 不支持   color:red;  }  $('a[title*=num]').css('color','red');//兼容IE6 //選定具有多個屬性且屬性值匹配成功的a[bbb][title=num1] {//IE6 不支持   color:red;  }  $('a[bbb][title=num1]').css('color','red');//兼容IE6 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩成人在线播放| 欧洲午夜精品久久久| 国产精品亚洲激情| 庆余年2免费日韩剧观看大牛| 亚洲人免费视频| 91免费人成网站在线观看18| 亚洲色图欧美制服丝袜另类第一页| 日韩av影院在线观看| 欧美激情亚洲精品| 欧美成人午夜激情| 精品国产乱码久久久久久虫虫漫画| 日韩中文字幕精品| 午夜精品一区二区三区在线播放| 欧美成人精品在线| 欧美另类69精品久久久久9999| 日韩有码在线电影| 青青精品视频播放| 91精品国产91久久久久久不卡| 亚洲美女性生活视频| 麻豆乱码国产一区二区三区| 久久精品美女视频网站| 2019中文字幕免费视频| 久久久久久久久爱| 国产视频观看一区| 亚洲男人天天操| 91在线免费网站| 不卡中文字幕av| 亚洲黄色www网站| 九九久久综合网站| 国产日产欧美精品| 欧美一级在线播放| 欧美视频在线观看免费| 欧美午夜激情小视频| 91精品啪在线观看麻豆免费| 最近2019好看的中文字幕免费| 亚洲xxxxx性| 久久av在线播放| 日韩免费高清在线观看| 国产视频丨精品|在线观看| 欧美久久久精品| 亚洲毛茸茸少妇高潮呻吟| 欧美激情高清视频| 日韩精品在线视频美女| 日韩欧美亚洲综合| 亚洲精品国产福利| 97视频在线观看成人| 亚洲第一黄色网| 欧美午夜电影在线| 亚洲欧美一区二区精品久久久| 中文字幕日韩免费视频| 欧美大片在线免费观看| 日韩免费观看网站| 国产亚洲视频在线| 日韩有码视频在线| 欧美日产国产成人免费图片| 久久久免费精品| 欧美性20hd另类| 中文字幕一精品亚洲无线一区| 国产成人精品一区二区在线| 在线电影欧美日韩一区二区私密| 欧美老肥婆性猛交视频| 久久艹在线视频| 亚洲精品白浆高清久久久久久| 国产一区av在线| 亚洲最新在线视频| 91人成网站www| 国产精品男女猛烈高潮激情| 国产丝袜精品第一页| 国产精品久久久久久av下载红粉| 亚洲成人1234| 国产午夜精品全部视频在线播放| 国产精品久久久久久久久久久不卡| 色哟哟入口国产精品| 美日韩在线视频| 欧美高清视频免费观看| 亚洲午夜国产成人av电影男同| 亚洲欧美日韩国产成人| 91精品国产91久久久久久| 久久福利视频网| 欧美精品激情在线| 亚洲精品中文字幕有码专区| 欧美性色xo影院| 成人妇女淫片aaaa视频| 6080yy精品一区二区三区| 亚洲欧美日韩精品久久奇米色影视| 亚洲欧美综合区自拍另类| 亚洲激情 国产| 精品无码久久久久久国产| 精品国产福利在线| 精品日韩美女的视频高清| 亚洲女性裸体视频| 性色av香蕉一区二区| 亚洲午夜激情免费视频| 精品福利在线看| 亚洲а∨天堂久久精品9966| 亚洲欧美日本另类| 亚洲品质视频自拍网| 亚洲精品美女久久久| 日本中文字幕成人| 亚洲精品一区av在线播放| 亚洲国产精品一区二区三区| 欧日韩不卡在线视频| 日韩最新免费不卡| 欧美高跟鞋交xxxxxhd| 国产欧美亚洲视频| 成人午夜激情网| 欧美亚洲国产视频小说| 欧美日韩中文字幕日韩欧美| 欧美专区第一页| 国产亚洲精品va在线观看| 97久久久久久| 96pao国产成视频永久免费| 久久影视电视剧免费网站清宫辞电视| 日韩在线播放视频| 久久久视频在线| 久久成人这里只有精品| 亚洲男人天堂2023| 国产精品热视频| 日韩国产在线播放| 国产精品成久久久久三级| 97视频在线观看视频免费视频| 91久久精品国产91性色| 欧美一乱一性一交一视频| 日日骚久久av| 欧美成人国产va精品日本一级| 怡红院精品视频| 久久中文久久字幕| 成人午夜两性视频| 亚洲图片欧美午夜| 国产精品久久久久久久久久新婚| 亚洲欧美中文日韩在线| 91免费视频国产| 中文字幕亚洲综合久久筱田步美| 国产精品久久久久免费a∨大胸| 91精品国产91久久久久久最新| 日韩高清人体午夜| 欧美激情视频网站| 国产男女猛烈无遮挡91| 久久国产精品偷| 国产精品国产自产拍高清av水多| 精品一区二区三区四区在线| 亚洲精品国产品国语在线| 黑人巨大精品欧美一区二区| 中文字幕欧美专区| 成人春色激情网| 欧美xxxx做受欧美| 国产91网红主播在线观看| 亚洲国产精品字幕| 欧美另类极品videosbest最新版本| 国产精品视频播放| 亚洲性av在线| 精品国产老师黑色丝袜高跟鞋| 欧亚精品中文字幕| 欧美午夜性色大片在线观看| 欧美成人在线免费| 日韩精品极品视频免费观看| 91精品久久久久久久久青青| 日韩a**站在线观看| 国产精品视频精品视频| 亚洲女性裸体视频| 久久精品中文字幕一区| 中文字幕亚洲综合久久筱田步美| 91精品视频免费| 美女福利精品视频|