JQuery 属性选取器一点有意思的地方

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

感觉其选取器功能真的灰常强大~~~~~~~~

-----

我在项目中碰到这样一个需求:

假如有如下这样几个input type="text":

Code

 

假如我要获取不包括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

 

选取器是:

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

获取到的是第一个元素,也就是说:这个时候跟:not不一样了,对原生属性来说,只要你写了,不管是否空值,它都会认为是存在的。

那自定义属性呢?把html改成:

Code

选取器是:

 

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

 

结果是::::获取到第2个元素!!!也就是说,第一个元素的属性存在,但是值为空的话,选取器就不要它了!!!

当然,如果在选取器中指定了属性值,如[validateGroup='']的话,就可以获取到了。

 

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

看起来:not[att] 和[att]其实是一样的:
在判断自定义属性是否存在时,即只用:not[att]或[att]时,只要没写该属性或该属性值为空,都会被视为不存在。

在这一点上,对原生属性而言,只有[att]有点不同:此时,即使是空值,它也会找到。。

 

其它的就没啥区别了。。

 

 

以上只是我的乱写乱弹----还希望高手能指点迷津!!!!

 

posted @ 2009-11-15 10:58  mcjeremy  阅读(1406)  评论(1编辑  收藏  举报
------------------------------------ 心静似高山流水不动,心清若巫峰雾气不沾 ------------------------------------