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,还是要学各种选择器。果然,你当初所欠下来的,未来都得还回来。