JQuery 屬性選取器一點有意思的地方

來源:互聯網
上載者:User

最近在項目中用到了jquery(俺的第一次%%%)

感覺其選取器功能真的灰常強大~~~~~~~~

-----

我在項目中碰到這樣一個需求:

假如有如下這樣幾個input type="text":

Code
text with validate group property:
<input type="text" id="validate1" name="validate1"/>
  <br />
  text withnot validate group property:
<input type="text" id="validate2" name="validate2" validateGroup="b" />

 

假如我要擷取不包括validateGroup屬性的元素該怎麼寫選取器呢?

我寫了如下的選取器:

'input[type=\'text\']:not([validateGroup])'

經測試,的確只能擷取到那個沒validateGroup屬性的元素。

按說這樣萬事大吉了。

 可,不幸的是,最近流行“閑得蛋疼”,我也追趕潮流了一把:

我給id="validate1"的元素加上了validateGroup=""的屬性,也就是加上了空值的validateGroup:

  text with validate group property:<input type="text" id="validate1" name="validate1" validateGroup="" />

 

這個時候,我再使用同樣的選取器。

結果:  還是擷取到了之前一樣的元素,按道理來說,我那樣的寫法是擷取不存在validateGroup屬性的元素啊?

可這個元素是有屬性,只不過賦了空值了呀???

對自訂屬性是這樣,對原生屬性呢?  

這一次我更改 id="validate2"的元素,將它的id幹成了空值:

<input type="text" id="" name="validate2" validateGroup="b" />

這時,我再用選取器:

'input[type=\'text\']:not([id])'

經過測試,擷取到的的確是第二個元素。。

至此,我得出一個我自己都不敢確定的結論:

使用:not來選取時,無論原生屬性還是自訂屬性,只要沒寫屬性,或屬性值為空白,都會被看著成這個屬性不存在 ?

---

蛋仍在疼,人仍在閑:
我測試了一下普通屬性選取:
HTML是:

 

Code
  text with validate group property:
<input type="text" id="validate1" name="validate1" validateGroup="a" />
  text withnot validate group property:
<input type="text" id="" name="validate2" validateGroup="b" />

 

選取器是:

'input[type=\'text\'][id]'

擷取到的是第一個元素,也就是說:這個時候跟:not不一樣了,對原生屬性來說,只要你寫了,不管是否空值,它都會認為是存在的。

那自訂屬性呢?把html改成:

Code
text with validate group property:
<input type="text" id="validate1" name="validate1" validateGroup="" />
text withnot validate group property:
<input type="text" id="validate2" name="validate2" validateGroup="b" />

選取器是:

 

'input[type=\'text\'][validateGroup]'

 

結果是::::擷取到第2個元素!!!也就是說,第一個元素的屬性存在,但是值為空白的話,選取器就不要它了!!!

當然,如果在選取器中指定了屬性值,如[validateGroup='']的話,就可以擷取到了。

 

-----------------------

看起來:not[att] 和[att]其實是一樣的:
在判斷自訂屬性是否存在時,即只用:not[att]或[att]時,只要沒寫該屬性或該屬性值為空白,都會被視為不存在。

在這一點上,對原生屬性而言,只有[att]有點不同:此時,即使是空值,它也會找到。。

 

其它的就沒啥區別了。。

 

 

以上只是我的亂寫亂彈----還希望高手能指點迷津!!!!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.