jQuery 择择器
基本筛选(基本过滤选择器)
名称 | 说明 | 举例 |
---|---|---|
:first | 匹配找到的第一个元素 | 查找表格的第一行:$("tr:first") |
:last | 匹配找到的最后一个元素 | 查找表格的最后一行:$("tr:last") |
:not(selector) | 去除所有与给定选择器匹配的元素 | 查找所有未选中的 input 元素: $("input:not(:checked)") |
:even | 匹配所有索引值为偶数的元素,从 0 开始计数 | 查找表格的1、3、5...行:$("tr:even") |
:odd | 匹配所有索引值为奇数的元素,从 0 开始计数 | 查找表格的2、4、6行:$("tr:odd") |
:eq(index) | 匹配一个给定索引值的元素 注:index从 0 开始计数 | 查找第二行:$("tr:eq(1)") |
:gt(index) | 匹配所有大于给定索引值的元素 注:index从 0 开始计数 | 查找第二第三行,即索引值是1和2,也就是比0大:$("tr:gt(0)") |
:lt(index) | 选择结果集中索引小于 N 的 elements 注:index从 0 开始计数 | 查找第一第二行,即索引值是0和1,也就是比2小:$("tr:lt(2)") |
:header | 选择所有h1,h2,p一类的header标签. | 给页面内所有标题加上背景色: $(":header").css("background", "#EEE"); |
:animated | 匹配所有正在执行动画效果的元素 | 只有对不在执行动画效果的元素执行一个动画特效: $("#run").click(function(){ |
:first
选取第一个元素
1). 获取匹配的第一个元素,相当于 :eq(0) 和 :lt(1)
2). 虽然:first只匹配一个单独的元素,但是:first-child选择器可以匹配多个,即为每个父级元素匹配第一个子元素
3). 请使用 $("your-pure-css-selector").eq(index) 代替,在现代浏览器上获得更佳的性能
:last
选取最后一个元素
为了在现代浏览器上获得更佳的性能,请使用 .filter(":last") 代替
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>:first :last</title> <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script> <style type="text/css"> *{padding: 0;margin: 0;} body{padding:30px;} p{height:90px;width:90px;float:left;border:1px solid #ddd;margin-left: 10px;} </style> </head> <body> <p>p 1</p> <p>p 2</p> <p>p 3</p> <p>p 4</p> <p>p 5</p> <p>p 6</p> <script> // 选择第一个p标签 // 注意: p和:first之间不要有空格,会选取p标签下一层的第一个标签 $('p:first').css('background' ,'red'); // 选择最后一个 $('p:last').css('background' ,'yellow'); </script> </body> </html>
效果
p 1span 7
p 2span 8
p 3
p 4
p 5
p 6
:not
在开发中很有用
p3和p5有.cname样式,没有添加黄色背景,其它的兄弟标签都添加了黄色背景
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>:not()在开发中很有用</title> <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script> <style type="text/css"> *{padding: 0;margin: 0;} body{padding:30px;} p{height: 90px;width: 90px;float: left;border:1px solid #ddd;margin-right:10px;} </style> </head> <body> <p>p 1</p> <p>p 2</p> <p class="cname">p 3</p> <p>p 4</p> <p class="cname">p 5</p> <p>p 6</p> <span style="display:block;clear:both; margin-bottom:60px;"><!-- 清除浮动 --></span> <script> $('p:not(\'.cname\')').css('background' ,'yellow'); // 如果不用单引号不使用转义,里面用双引号也是可以的,如下 // $('p:not(".cname")').css('background' ,'yellow'); </script> </body> </html>
效果
p 1
p 2
p 3
p 4
p 5
p 6
Example
1. 选择器可以放置在:not()中,例如 :not(div a)和:not(div,a)
2. 而使用:not()通常会构建出一个非常复杂的选择器,所以大多数情况下,推荐使用.not()方法
<input name="glee" value="glee" /> <input name="rose" value="rose" /> <input name="flower" disabled="disabled" /> <em></em> <script> // 选中:not()之外的两个表单,添加黄色背景 var input = $("input:not(':disabled')").css('background' ,'yellow'); //把选中的input元素,赋值em元素 var str = input.map(function(index){ // alert($(this).val()); return $(this).val(); }).get().join(", "); $('em').html(str); </script>
:even() 选择所引值为偶数的元素 0,2,4
:odd() 选择索引值为奇数元素 1,3,5
从0开始计数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>:even/:odd</title> <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script> <style type="text/css"> *{padding: 0;margin: 0;} body{padding:30px;} p{height: 90px;width: 90px;float: left;border:1px solid #ddd;margin-left: 10px;} </style> </head> <body> <p>p #0</p> <p>p #1</p> <p>p #2</p> <p>p #3</p> <p>p #4</p> <p>p #5</p> <script> $('p:even').css('background' ,'yellow'); //选择所引值为偶数的元素 $('p:odd').css('background' ,'red'); //选择索引值为奇数元素 /* 其他注意事项: :even/:odd是一个jQuery延伸出来的选择器,并不是的CSS规范的一部分,使用:even 查询不能充分利用原生DOM提供的querySelectorAll()方法来提高性能。 为了当使用:even/:odd的时候在现代浏览器上获得更佳的性能,首先使用纯CSS选择器选择元素,然后使用.filter(":even")/.filter(":odd") */ </script> </body> </html>
效果
p #0
p #1
p #2
p #3
p #4
p #5
:eq()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>:eq(index)</title> <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script> <style type="text/css"> *{padding: 0;margin: 0;} body{padding:30px;} p{height: 90px;width: 90px;float: left;border:1px solid #ddd;margin-left: 10px;} </style> </head> <body> <p>p #1</p> <p>p #2</p> <p>p #3</p> <p>p #4</p> <p>p #5</p> <p>p #6</p> <span style="display:block;clear:both;"><!-- 清除浮动 --></span> <script> $('p:eq(2)').css('background' ,'yellow'); // 索引从0开始,索引2实际选中个第三个p元素 $('p:eq(-2)').css('background' ,'orange'); // 在jQuery 1.8之前:eq(index)不接受负值所引值(虽然.eq(index)方法接受),-2 选择倒数第二个元素 </script> </body> </html>
效果
p #1
p #2
p #3
p #4
p #5
p #6
:eq()是一个jQuery延伸出来的选择器,并不是的CSS规范的一部分,
使用:eq()查询不能充分利用原生DOM提供的querySelectorAll() 方法来提高性能。
为了在现代浏览器上获得更佳的性能,
请使用$("your-pure-css-selector").eq(index)代替。
由于JavaScript数组使用基于0的索引,这些选择器也是如此。
这就是为什么$('p:eq(1)')选择器选择文档中第二个p的元素,而不是第一个。
与此相反,:nth-child(n)是基于1的索引的,以符合CSS规范。
列表项目中应用三种不同的样式,以此来展示:eq()只会选择一个元素,而:nth-child()或:eq()会像.each()一样,有类似循环的构造,从而选择多个元素
<ul class="nav"> <li>List 1, item 1</li> <li>List 1, item 2</li> <li>List 1, item 3</li> </ul> <ul class="nav"> <li>List 2, item 1</li> <li>List 2, item 2</li> <li>List 2, item 3</li> </ul> <script> // 选中一个元素 $("ul.nav li:eq(1)").css( "backgroundColor", "#ff0" ); // 通过each()循环,选中两ul的第二个li元素 $("ul.nav").each(function(index) { $(this).find("li:eq(1)").css( "fontStyle", "italic" ); }); //:nth-child()可以直接选中两个ul下的第二个li元素 $("ul.nav li:nth-child(2)").css( "color", "red" ); </script>
:gt(index)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>:gt()</title> <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script> <style type="text/css"> *{padding: 0;margin: 0;} body{padding:30px;} p{height: 90px;width: 90px;float: left;border:1px solid #ddd;margin-left: 10px;} </style> </head> <body> <p>p #1</p> <p>p #2</p> <p>p #3</p> <p>p #4</p> <p>p #5</p> <p>p #6</p> <script> //索引从零开始,索引大于3的都被选中 $('p:gt(2)').css('background' ,'yellow'); //大于-3的的-1,-2被选中 $('p:gt(-3)').css('color' ,'red'); /* 1: jQuery1.8以前的版本,:gt(index)选择器不接收一个负数的index值。 2: :gt()是一个jQuery延伸出来的选择器。并且不是的CSS规范的一部分, 使用:gt()查询不能充分利用原生DOM提供的querySelectorAll() 方法来提高性能。 为了在现代浏览器上获得更佳的性能,请使用$("your-pure-css-selector").slice(index)代替。 */ </script> </body> </html>
效果
p #1
p #2
p #3
p #4
p #5
p #6
lt(indxe)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>:lt(index)</title> <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script> <style type="text/css"> *{padding: 0;margin: 0;} body{padding:30px;} p{height: 90px;width: 90px;float: left;border:1px solid #ddd;margin-left: 10px;} </style> </head> <body> <p>p #1</p> <p>p #2</p> <p>p #3</p> <p>p #4</p> <p>p #5</p> <p>p #6</p> <script> //索引从零开始,小3的元素都被选中 $('p:lt(2)').css('background' ,'yellow'); //-2之后-3,-4...都被选中 $('p:lt(-2)').css('color' ,'red'); /*** 其他与:gt()一样 1:jQuery 1.8以前的版本,:lt(index)选择器不接收一个负数的index值 2:请使用$("your-pure-css-selector").slice(0, index)代替。 ***/ </script> </body> </html>
效果
p #1
p #2
p #3
p #4
p #5
p #6
:header
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>:lt(index)</title> <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script> <style type="text/css"> *{padding: 0;margin: 0;} body{padding:30px;} <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>:header</title> <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script> <style type="text/css"> *{padding: 0;margin: 0;} body{padding:30px;} </style> </head> <body> <!--视频教程的老师说 :header 这个基本没用! --> <h1>h1</h1> <p>p</p> <h3>h3</h3> <div>div</div> <h5>h5</h5> <span style="display: block;">span</span> <script> //只选中h标签 $(':header').css('color' ,'yellow'); /*** :header()是一个jQuery延伸出来的一个选择器,不是的CSS规范的一部分, 使用:header()查询不能充分利用原生DOM提供的querySelectorAll()方法来提高性能。 为了在现代浏览器上获得更佳的性能,请使用.filter(":header")代替。 ***/ </script> </body> </html>
:animated
<!DOCTYPE html> <html> <head> <title>:animated</title> <style> div { background:yellow; border:1px solid #AAA; width:80px; height:80px; margin:0 5px; float:left; } div.colored { background:green; } </style> <script src="http://code.jquery.com/jquery-latest.js"></script> </head> <body> <div></div> <div id="mover"></div> <div></div> <button id="run">Run</button> <p style="width: 100px;height: 100px;background: teal;position:absolute;left:0;top: 120px;">:animated</p> <script> //选择所有正在执行动画效果的元素. //手册上的例子 $("#run").click(function(){ $("div:animated").toggleClass("colored"); }); function animateIt() { $("#mover").slideToggle("slow", animateIt); } animateIt(); //视频里的例子,比较直接 $('p').animate({'left':'600'},10000); $('p:animated').css('background','green'); </script> </body> </html>
手册上提示的注意事项:
:first()
:even
:odd
:header()
:animated
:eq()
:gt()
:lt()
:not()
上面这些是一个jQuery延伸出来的一个选择器,并且不是的CSS规范的一部分, 不能充分利用原生DOM提供的querySelectorAll()方法来提高性能。
为了在现代浏览器上获得更佳的性能,请分别使用:
.filter(":first")
.filter(":even")
.filter(":odd")
.filter(":header")
代替
:eq()使用$("your-pure-css-selector").eq(index)代替
:gt()/:lt()使用$("your-pure-css-selector").slice(0, index)代替。
:not()推荐使用.not()方法