jQuery 的选择器借鉴了大量 CSS1 ~ CSS3 标准的特点,并且整理成一个强大的对象选择工具集。但要注意的是如果你的对象名里包含 “#;&,.+*~’:”!^$[]()=>|/” 这些元字符时,你必须用 “\\” 进行转义。例如你要选择文档里包含 “name=”names[]“” 的 input 元素时,在编写过滤规则时你必须先对 “[]” 进行转义,所以我们应该这样定义选择器:“$(“input[name=names\\[\\]]”)”。
在 jQuery 选择器里,“*” 号是一个通配符,表示所有。例如:
1 |
$("*").css("border","3px solid red") |
上面的一句表示遍历页面里的所有容器,并且全部赋予一个线宽为 3px 的红色实线边框。还有一种情况是我们只需要对某些容器里的内容进行操作,我们可以这样写:
1 |
$("#test").find("*").css("border","3px solid red") |
上一句只对 ID 为 test 的容器里的子容器产生效果,为它们加上线宽为 3px 的红色实现边框。
:animated 选择器是用来选择当前执行 jQuery 动画的元素的,严格来说是一个特征过滤器。例如:在空 HTML 文档里建一些 Div ,其中一个 ID 为 mover ,然后编写以下的 jQuery 语句
1 2 |
$("#mover").slideToggle("slow", animateIt); $("div:animated").toggleClass("colored"); |
上面的代码执行后将先找到 ID 为 mover 的元素,并不断地进行展开和收缩的动画。然后浏览器遍历页面里所有的 Div 标签,如果该 Div (在这个例子里也就是 ID 为 mover 的 Div 了)正在执行动画的话,jQuery 将为这个 Div 加上 class=”colored”。具体的 Demo 可以看这个页面。
jQuery 的属性选择器是其所有选择器最强大的一个,也是最灵活复杂的,具体情况还可以继续进行细分。
jQuery 属性字头选择器的使用格式是 jQuery(‘[attribute|=value]‘) ,例如 jQuery(‘[herflang|=en]‘) 这句代码执行时将会选择文档中所有含有 herflang 属性,并且 herflang 的值以 “en” 开头的元素,即使 “en” 后面紧跟着连字符 “-” 也能进行选择。
jQuery(‘[attribute^=value]‘) ,用于选择属性的值以某个字符串开头的元素,但和 jQuery(‘[attribute|=value]‘) 的区别是,如果 value 的后面是一个连字符的话,这个元素不会被选择。例如 jQuery(‘[rel^=no]‘) 将会选择所有 rel 的值以 “no” 开头的元素,但类似于 rel=”no-****” 的元素不会被选择。
基本使用方法为 jQuery(‘[attribute*=value]‘),例如 jQuery(‘[rel*=no]‘),表示所有带有 rel 属性,并且 rel 的值里包含子字符串 “no” 的元素(如 rel=”nofollow”,rel=”yesorno” 等等)都将会被选择。
jQuery(‘[attribute~=value]‘),这个选择器的特别之处在于 value 的值只能必须是一个独立的单词(或者是字符串),例如 jQuery(‘[rel~=no]‘) ,此句在执行的时候会选择带有 rel=”yes or no” 的元素,但不会选择带有 rel=”yesorno” 的元素。这个选择器可以看做属性包含选择器的补充品,用于需要进行严格匹配的时候。
jQuery(‘[attribute$=value]‘) ,用于选择特定属性的值以某个字符串结尾的元素,例如 jQuery(‘[rel$=no]‘) 将会选择 rel 属性的值以 “no” 结尾的元素。
jQuery(‘[attribute=value]‘) ,只选择属性的值完全相等的元素,如:jQuery(‘[rel=nofollow]‘),则只选择 rel=”nofollow” 的元素,差一点都不行!
jQuery(‘[attribute!=value]‘) ,和 :not([attr=value]) 的效果一样,用于选择属性不等于某个值的元素,例如jQuery(‘[rel!=nofollow]‘),所有 rel=”nofollow” 的元素都不会被选择。
jQuery(‘:button’) ,所有的 <input type=”button”> 和 <button> 元素都会被选择。
jQuery(‘:checkbox’) ,所有的 <input type=”checkbox”> 元素都会被选择。
jQuery(‘:checked’) ,可以看做是 Checkbox 选择器的补充,用于选择所有已经被勾选的 Checkbox 对象。
jQuery(‘parent > child’),只选择 parent 的子元素(下一级元素),不对子元素以下的元素进行选择。
复合属性选择器 [attributeFilter1][attributeFilter2][attributeFilterN]
用法: $(“input[id][name$='man']“) ;
说明: 复合属性选择器,需要同时满足多个条件时使用.又是一个组合,这种情况我们实际使用的时候很常用.这个例子中选择的是所有含有 id 属性,并且它的 name 属性是以 man 结尾的元素.
通过属性过滤(Attribute Filters)的学习,可以看出来,jQuery的选择器用法是微妙的,得细致而为之.让我想起来了那个因为一个小数点导致什么宇宙飞船爆炸还是什么的事了.有点耸人听闻,但是等我们使用的非常非常多了以后,自然就很容易分开区别了.