最近在項目中用到了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]有點不同:此時,即使是空值,它也會找到。。
其它的就沒啥區別了。。
以上只是我的亂寫亂彈----還希望高手能指點迷津!!!!