JQuery的选择器
页面的任何操作都须要节点的撑持,开发者如何疾速高效的找到指定的节点也是前端开发中的一个重点。jQuery提供了一系列的选择器帮忙开发者达到这一目标,让开发者能够更少的解决简单抉择过程与性能优化,更多专一业务逻辑的编写。
jQuery简直反对支流的css1~css3选择器的写法,咱们从最简略的也是最罕用的开始学起
1、id选择器:一个用来查找的ID,即元素的id属性
$( "#id" )
id选择器也是根本的选择器,jQuery外部应用JavaScript函数document.getElementById()来解决ID的获取。原生语法的反对总是十分高效的,所以在操作 DOM的获取上,如果能采纳id的话尽然思考用这个选择器 值得注意: id是惟一的,每个id值在一个页面中只能应用一次。如果多个元素调配了雷同的id,将只匹配该id抉择汇合的第一个DOM元素。但这种行为不应该产生;有超过一个元素的页面应用雷同的id是有效的
2、类选择器,顾名思义,通过class款式类名来获取节点
形容:$( ".class" )
类选择器,绝对id选择器来说,效率绝对会低一点,然而劣势就是能够多选,同样的jQuery在实现上,对于类选择器,如果浏览器反对,jQuery应用JavaScript的原生getElementsByClassName()函数来实现的 咱们不难发现: jQuery除了抉择上的简略,而且没有再次应用循环解决 不难想到$(".imooc").css()办法外部必定是带了一个隐式的循环解决,所以应用jQuery抉择节点,不仅仅只是抉择上的简略,同时还减少很多关联的便当操作,后续咱们还会缓缓的学到其余的劣势。 3、元素选择器:依据给定(html)标记名称抉择所有的元素
形容:$( "element" )
搜寻指定元素标签名的所有节点,这个是一个合集的操作。同样的也有原生办法getElementsByTagName()函数反对 下例代码所示:
<body> <div class="aaron"> <p>class="aaron"</p> <p>选中</p> </div> <div class="aaron"> <p>class="aaron"</p> <p>选中</p> </div> <div class="imooc"> <p>class="imooc"</p> <p>jQuery选中</p> </div> <div class="imooc"> <p>class="imooc"</p> <p>jQuery选中</p> </div> <script type="text/javascript"> //通过原生办法解决 //获取到所有的节点标记名为div的元素 //给每一个div加上蓝色的边框 var divs = document.getElementsByTagName('div'); for (var i = 0; i < divs.length; i++) { divs[i].style.border = "3px solid blue"; } </script> <script type="text/javascript"> //通过jQuery间接传入标签名p //标签是能够多个的,所以失去的同样也是一个合集 $("p").css("border", "3px solid red"); </script></body>复制代码
第一组:通过getElementsByTagName
办法失去页面所有的<div>
元素 var divs = document.getElementsByTagName('div')
; divs
是dom
合集对象,通过循环给每一个合集中的<div>
元素赋予新的boder
款式 二组:同样的成果,$("p")
选取所有的<p>
元素,通过css办法间接赋予款式
4、全选择器(*选择器)
在CSS中,常常会在第一行写下这样一段款式
{padding: 0; margin: 0;}
通配符意味着给所有的元素设置默认的边距。jQuery中咱们也能够通过传递选择器来选中文档页面中的元素
形容:$( "*" )
抛开jQuery,如果要获取文档中所有的元素,通过document.getElementsByTagName()中传递"*"同样能够获取到
不难发现,id、class、tag都能够通过原生的办法获取到对应的节点,然而咱们还须要思考一个兼容性的问题,我这里顺便提及一下,比方:
- IE会将正文节点实现为元素,所以在IE中调用getElementsByTagName外面会蕴含正文节点,这个通常是不应该的
- getElementById的参数在IE8及较低的版本不辨别大小写
- IE7及较低的版本中,表单元素中,如果表单A的name属性名用了另一个元素B的ID名并且A在B之前,那么getElementById会选中A
- IE8及较低的版本,浏览器不反对getElementsByClassName
5、层级选择器
文档中的所有的节点之间都是有这样或者那样的关系。咱们能够把节点之间的关系能够用传统的家族关系来形容,能够把文档树当作一个家谱,那么节点与节点间接就会存在父子,兄弟,祖孙的关系了。
选择器中的层级选择器就是用来解决这种关系:子元素、后辈元素、兄弟元素、相邻元素
通过一个列表,比照层级选择器的区别
仔细观察层级选择器之间还是有很多类似与不同点
- 层级选择器都有一个参考节点
- 后辈选择器蕴含子选择器的抉择的内容
- 个别兄弟选择器蕴含相邻兄弟抉择的内容
- 相邻兄弟选择器和个别兄弟选择器所抉择到的元素,必须在同一个父元素下
6、根本筛选选择器
很多时候咱们不能间接通过根本选择器与层级选择器找到咱们想要的元素,为此jQuery提供了一系列的筛选选择器用来更快捷的找到所需的DOM元素。筛选选择器很多都不是CSS的标准,而是jQuery本人为了开发者的便当延展进去的选择器
筛选选择器的用法与CSS中的伪元素类似,抉择器用冒号“:”结尾,通过一个列表,看看根本筛选器的形容:
注意事项:
- :eq(), :lt(), :gt(), :even, :odd 用来筛选他们后面的匹配表达式的汇合元素,依据之前匹配的元素在进一步筛选,留神jQuery合集都是从0开始索引
- gt是一个段落筛选,从指定索引的下一个开始,gt(1) 理论从2开始
7、内容筛选选择器
根本筛选选择器针对的都是元素DOM节点,如果咱们要通过内容来过滤,jQuery也提供了一组内容筛选选择器,当然其规定也会体现在它所蕴含的子元素或者文本内容上
内容过滤器形容如下表:
注意事项:
- :contains与:has都有查找的意思,然而contains查找蕴含“指定文本”的元素,has查找蕴含“指定元素”的元素
- 如果:contains匹配的文本蕴含在元素的子元素中,同样认为是符合条件的。
- :parent与:empty是相同的,两者所波及的子元素,包含文本节点
8、可见性筛选选择器
元素有显示状态与暗藏状态,jQuery依据元素的状态扩大了可见性筛选选择器:visible与:hidden
形容如下:
这2个选择器都是 jQuery 延长进去的,看起来比较简单,然而元素可见性依赖于实用的款式
hidden选择器,不仅仅蕴含款式是display="none"的元素,还包含暗藏表单、visibility等等
咱们有几种形式能够暗藏一个元素:
- CSS display的值是none。
- type="hidden"的表单元素。
- 宽度和高度都显式设置为0。
- 一个先人元素是暗藏的,该元素是不会在页面上显示
- CSS visibility的值是hidden
- CSS opacity的指是0
如果元素中占据文档中肯定的空间,元素被认为是可见的。 可见元素的宽度或高度,是大于零。 元素的visibility: hidden 或 opacity: 0被认为是可见的,因为他们依然占用空间布局。
9、属性筛选选择器
属性选择器让你能够基于属性来定位一个元素。能够只指定该元素的某个属性,这样所有应用该属性而不论它的值,这个元素都将被定位,也能够更加明确并定位在这些属性上应用特定值的元素,这就是属性选择器展现它们的威力的中央。
浏览器反对:
- [att=val]、[att]、[att|=val]、[att~=val] 属于CSS 2.1标准
- [ns|attr]、[att^=val]、[att*=val]、[att$=val] 属于CSS3标准
- [name!="value"] 属于jQuery 扩大的选择器
CSS选择器无论CSS2.1版本还是CSS3版本,IE7和IE8都反对,webkit、Gecko外围及Opera也都反对,只有IE6以下浏览器才不反对
在这么多属性选择器中[attr="value"]和[attr*="value"]是最实用的
[attr="value"]能帮咱们定位不同类型的元素,特地是表单form元素的操作,比如说input[type="text"],input[type="checkbox"]等 [attr*="value"]能在网站中帮忙咱们匹配不同类型的文件
10、子元素筛选选择器
子元素筛选选择器不常应用,其筛选规定比起其它的选择器略微要简单点
子元素筛选选择器形容表:
注意事项:
- :first只匹配一个独自的元素,然而:first-child选择器能够匹配多个:即为每个父级元素匹配第一个子元素。这相当于:nth-child(1)
- :last 只匹配一个独自的元素, :last-child 选择器能够匹配多个元素:即,为每个父级元素匹配最初一个子元素
- 如果子元素只有一个的话,:first-child与:last-child是同一个
- :only-child匹配某个元素是父元素中惟一的子元素,就是说以后子元素是父元素中惟一的元素,则匹配
- jQuery实现:nth-child(n)是严格来自CSS标准,所以n值是“索引”,也就是说,从1开始计数,:nth-child(index)从1开始的,而eq(index)是从0开始的
- nth-child(n) 与 :nth-last-child(n) 的区别前者是从返回后计算,后者从后往前计算
11、表单元素选择器
无论是提交还是传递数据,表单元素在动静交互页面的作用是十分重要的。jQuery中专门退出了表单选择器,从而可能极其不便地获取到某个类型的表单元素
表单选择器的具体方法形容:
注意事项:
除了input筛选选择器,简直每个表单类别筛选器都对应一个input元素的type值。大部分表单类别筛选器能够应用属性筛选器替换。比方 (′:password′)==(':password') == (′:password′)==('[type=password]')。
刚学CSS的时候,感觉CSS选择器也太多了吧,过后就想要不不学了吧,就只学了根本选择器。到了jQuery,还是要学各种选择器。果然,你当初所欠下来的,未来都得还回来。