jQuery选择器之全面总结

  选择器是jQuery的根基,在jQuery中,对事件处理,遍历DOM和Ajax操作都依赖于选择器。如果能熟练的使用选择器,不仅能简化代码,而且可以达到事半功倍的效果。

  jQuery中的选择器完全继承了CSS的风格,利用jQuery选择器,可以非常便捷和快速的找出特定的DOM元素,然后为它们添加相应的行为,而无需担心浏览器是否支持这一选择器。

  为了便于记忆和学习,我们把jQuery选择器分为以下几类:

 

  • 基本选择器
  • 层次选择器
  • 过滤选择器
    1. 基本过滤选择器
    2. 内容过滤选择器
    3. 可见性过滤选择器
    4. 属性过滤选择器
    5. 子元素过滤选择器
    6. 表单对象属性过滤选择器
  • 表单选择器


为了演示这些选择器,首先手写一个包含各种DOM元素如文本框,多选框,DIV等的HTML页面

 1    <!-- 测试的元素 -->
 2   <div class="one" id="one" >
 3     id为one,class为one的div
 4       <div class="mini">class为mini</div>
 5   </div>
 6 
 7   <div class="one"  id="two" title="test" >
 8      id为two,class为one,title为test的div.
 9       <div class="mini"  title="other">class为mini,title为other</div>
10       <div class="mini"  title="test">class为mini,title为test</div>
11   </div>
12 
13   <div class="one">
14       <div class="mini">class为mini</div>
15       <div class="mini">class为mini</div>
16       <div class="mini">class为mini</div>
17       <div class="mini"></div>
18   </div>
19 
20 
21 
22   <div class="one">
23       <div class="mini">class为mini</div>
24       <div class="mini">class为mini</div>
25       <div class="mini">class为mini</div>
26       <div class="mini"  title="test">class为mini,title为test</div>
27   </div>
28 
29 
30   <div style="display:none;"  class="none">style的display为"none"的div</div>
31   
32   <div class="hide">class为"hide"的div</div>
33  
34   <div>
35   包含input的type为"hidden"的div<input type="hidden" size="8"/>
36   </div>
37 
38   
39   <span id="mover">正在执行动画的span元素.</span>

一、基本选择器:通过元素id,class和标签名等来查找Dom元素

  1)$("#id") 根据给定的ID匹配一个元素,返回单个元素 $("#name")选取Id为test的元素
  2)$(".class") 根据给定的类名匹配元素 返回集合元素 $(".class")选取所有class为class的元素
  3)$("element") 根据给定的元素名匹配元素,返回集合元素 $("input")选取所有的input元素
  4)$("*") 匹配所有的元素,返回集合元素,$("*")选取所有的元素
  5)$("selector1,selector2,...,selectorN") 将每一个选择器匹配到的元素合并后返回集合元素, $("div,span,p.myClass")选取所有<div>,<span>和拥有class为myClass的<p>标签的一组元素

示例:

 1  //选择 id为 one 的元素
 2 $(‘#one‘).css("background","#bfa");
 3 //选择 class 为 mini 的所有元素
 4 $(‘.mini‘).css("background","#bfa");
 5 //选择 元素名是 div 的所有元素
 6 $(‘div‘).css("background","#bfa");
 7 //选择 所有的元素
 8 $(‘*‘).css("background","#bfa");
 9 //选择 所有的span元素和id为two的div元素
10 $(‘span,#two‘).css("background","#bfa");

二、层次选择器:通过Dom元素之间的层次关系来获取特定元素,例如后代元素,子元素,相邻元素和同辈元素

     1)$("ancestor descendant") 获得ancestor元素里面的所有descendant(后代)元素,$("div span")选取<div>里的所有的<span>元素

     2)$("parent>child") 选取parent元素下的child(子)元素,返回集合元素 $("div span")选取<div>元素下元素名为<span>的子元素

        注解:和$("ancestor descendant")有区别,$("ancestor descendant")选择的是后代元素

     3)$("prev+next") 选取紧接在prev元素后的next元素,返回集合元素,$(".one+div")选取class为one的下一个<div>同辈元素

     4)$("prev~siblings") 选取prev元素之后的所有siblings元素,$("#two~div")选取Id为two的元素后面的所有<div>同辈元素

        注解:可以使用next()方法来替代$(‘prev+next‘)选择器  $(".one").next("div");可以使用nextAll()方法来替代$("prev~siblings")选择器 $("#two").nextAll(div)

示例:

1 //选择 body内的所有div元素.
2   $(‘body div‘).css("background","#bbffaa");
3 //在body内的选择 元素名是div 的子元素.
4   $(‘body > div‘).css("background","#bbffaa");
5 //选择 所有class为one 的下一个div元素.
6   $(‘.one + div‘).css("background","#bbffaa");
7 //选择 id为two的元素后面的所有div兄弟元素.
8   $(‘#two ~ div‘).css("background","#bbffaa");

三、过滤选择器:通过特定的过滤规则来筛选出所需要的Dom元素,按照不同的过滤规则,过滤选择器可以分为基本过滤,内容过滤,可见性过滤,属性过滤,子元素过滤和表单对象属性过滤选择器

  1)基本过滤选择器 

    1)$(":first") 选取第一个元素,$("div:first")选取所有<div>元素中第一个<div>元素。
    2)$(":last")选取最后一个元素,$("div:last")选取所有<div>元素中最后一个<div>元素。
    3)$(":not(selector)")去除所有与给定选择器匹配的元素,$("input:not(.myClass)")选取class不是myClass的<input>元素。
    4)$(":even")选取索引是偶数的所有元素,索引从0开始,$("input:even")选取索引是偶数的<input>元素
    5)$(":odd")选取索引是奇数的所有元素,索引从0开始,$("input:odd")选取索引是奇数的<input>元素
    6)$(":eq(index)")选取索引等于index的元素,(index从0开始),$("input:eq(1)")选取索引等于1的<input>元素
    7)$(":gt(index)")选取索引大于index的元素,(index从0开始),$("input:gt(1)")选取索引大于1的<input>元素(大于1,而不包括1)
    8)$(":lt(index)")选取索引小于index的元素,(index从0开始),$("input:lt(1)")选取索引小于1的<input>元素(小于1,而不包括1)
    9)$(":header")选取所有的标题元素,例如:h1,h2,h3等等,$(":header")选取网页中的所有的<h1>,<h2>,<h3>...
    10)$(":animated")选取当前正在执行动画的所有元素,$("div:animated")选取正在执行动画的<div>元素。
    11)$(":focus")选取当前获取焦点的元素,$(":focus")选取当前获取焦点的元素

  示例: 

 1 //选择第一个div元素.
 2   $(‘div:first‘).css("background","#bfa");
 3 //选择最后一个div元素.
 4   $(‘div:last‘).css("background","#bfa");
 5 //选择class不为one的 所有div元素.
 6   $(‘div:not(.one)‘).css("background","#bfa");
 7 //选择 索引值为偶数 的div元素。
 8   $(‘div:even‘).css("background","#bfa");
 9 //选择 索引值为奇数 的div元素。
10   $(‘div:odd‘).css("background","#bfa");
11 //选择 索引等于 3 的元素
12   $(‘div:eq(3)‘).css("background","#bfa");
13 //选择 索引大于 3 的元素
14   $(‘div:gt(3)‘).css("background","#bfa");
15 //选择 索引小于 3 的元素
16   $(‘div:lt(3)‘).css("background","#bfa");
17 //选择 所有的标题元素.比如h1, h2, h3等等...
18   $(‘:header‘).css("background","#bfa");
19 //选择 当前正在执行动画的所有元素.
20   $(‘:animated‘).css("background","#bfa");

  

  2)内容过滤选择器:主要体现在它所包含的子元素或者文本内容上面

    1)$(":contains(text)")选取含有文本为"text"的元素,$("div:contains(‘我‘)")选取含有文本"我"的<div>元素

    2)$(":empty")选取不包含子元素或者文本的空元素,$("div:empty")选取不包含子元素(包括文本元素)的<div>空元素

    3)$(":has(selector)")选取含有选择器所匹配的元素的元素,$("div:has(p)")选取含有<p>元素的<div>元素

    4)$(":parent")选取含有子元素或者文本的元素,$("div:parent")选取拥有子元素(包括文本元素)的<div>元素

  示例:

1   //选取含有文本"di"的div元素.
2   $(‘div:contains(di)‘).css("background","#bbffaa");
3   //选取不包含子元素(或者文本元素)的div空元素.
4   $(‘div:empty‘).css("background","#bbffaa");
5   //选取含有class为mini元素 的div元素.
6   $(‘div:has(.mini)‘).css("background","#bbffaa");
7   //选取含有子元素(或者文本元素)的div元素.
8   $(‘div:parent‘).css("background","#bbffaa");

 

  3)可见性过滤选择器:根据元素的可见和不可见状态来选择相应的元素

     1)$(":hidden")选取所有不可见的元素,$(":hidden")选取所有不可见的元素,包括<input type="hidden" />,

    <div style="display:none;">和<div style="visibility:hidden;">等元素。如果只想选取<input>元素,可以使用$("input:hidden")

    2)$(":visible")选取所有可见的元素,$("div:visible")选取所有可见的<div>元素

  示例:

 1   //选取所有不可见的元素.包括<input type="hidden"/>.
 2   $(‘#btn_hidden‘).click(function(){
 3       alert( "不可见的元素有:"+$(‘body :hidden‘).length +"个!\n"+
 4        "其中不可见的div元素有:"+$(‘div:hidden‘).length+"个!\n"+
 5        "其中文本隐藏域有:"+$(‘input:hidden‘).length+"个!");
 6       $(‘div:hidden‘).show(3000).css("background","#bbffaa");
 7   })
 8   //选取所有可见的元素.
 9   $(‘#btn_visible‘).click(function(){
10       $(‘div:visible‘).css("background","#FF6500");
11   })

 

  4)属性过滤选择器:通过元素的属性来获取相应的元素

    1)$("[attribute]")选取拥有此属性的元素,$("div[id]")选取拥有属性Id的<idv>元素。

    2)$("[attribute=value]")选取属性的值为value的元素,$("div[title=test]")选取属性title为"test"的<div>元素

    3)$("[attribute!=value]")选取属性的值不等于value的元素,$("div[title!=test]")选取属性title不等于"test"的<div>元素(注意:没有属性title的<div>元素也会被选取)

    4)$("[attribute^=value]")选取属性的直以value开始的元素,$("div[title^=test]")选取属性title以"test"开始的<div>元素

    5)$("[attribute$=value]")选取属性的值以value结束的元素,$("div[title$=test]")选取属性title以"test"结束的<div>元素

    6)$("[attribute*=value]")选取属性的值含有value的元素,$("div[title*=test]")选取属性title含有"test"的<div>元素

    7)$("[attribute|=value]")选取属性等于给定字符串或以给字符串为前缀(该字符串后跟一个连字符"-")的元素,$("div[title|="en"]")选取属性title等于en或者以en为前缀(给字符串后跟一个"-")的元素

    8)$("[attribute~=value]")选取属性用空格分隔的值中包含一个给定值得元素,$("div[title~=‘uk‘]")选取属性title用空格分隔的值中包含字符uk的元素

    9)$("[attribute1][attribute2][attribute3]")用属性选择器合并成一个复合属性选择器,满足多个条件,每选择一次,缩小一次范围

           $("div[id][title$=‘test‘]")选取拥有属性id,并且属性title以"test"结束的<div>元素

  示例:

 1   //选取含有 属性title 的div元素.
 2   $(‘div[title]‘).css("background","#bbffaa");
 3   //选取 属性title值等于 test 的div元素.
 4   $(‘div[title=test]‘).css("background","#bbffaa");
 5   //选取 属性title值不等于 test 的div元素.
 6   $(‘div[title!=test]‘).css("background","#bbffaa");
 7   //选取 属性title值 以 te 开始 的div元素.
 8   $(‘div[title^=te]‘).css("background","#bbffaa");
 9   //选取 属性title值 以 est 结束 的div元素.
10   $("div[title$=est]").css("background","#bbffaa");
11   //选取 属性title值 含有 es  的div元素.
12   $("div[title*=es]").css("background","#bbffaa");
13   //组合属性选择器,首先选取有属性id的div元素,然后在结果中 选取属性title值 含有 es 的元素.
14   $("div[id][title*=es]").css("background","#bbffaa");

 

  5)子元素过滤选择器

          注解:子元素过滤选择器的过滤规则相对于其他的选择器稍微有些复杂,只要将元素的父元素和子元素区分清楚,使用起来还是相当简单的

    1)$(":nth-child(idenx/even/odd/equation)")选取每个父元素下的第index个子元素或者奇偶元素(idnex从1算起)

    :eq(index)只匹配一个元素,而:nth-child将为每一个父元素匹配子元素,并且:nth-child(index)的index是从1开始的,而:eq(index)是从0开始的

    2)$(":first-child")选取每个父元素的第一个子元素,:first只返回单个元素,而:first-child选择符将为每个父元素匹配第一个

    子元素,例如:$("ul li:first-child");选取每个<ul>中的一个<li>元素

    3)$(":last-child")选取每个父元素的最后一个子元素,和上面一样,:last只返回当个元素,而:last-child选择符将为每个符永

    元素匹配最后一个子元素,例如:$("ul li:first-child");选取每个<ul>中的最后一个<li>元素。

    4)$(":only-child")如果某个元素是它父元素中唯一的子元素,那么将会被匹配,如果父元素中含有其他元素,这不会被匹配

     $("ul li:only-child")在<ul>中选取是唯一子元素的<li>元素

    5):nth-child()选择器是很常用的子元素过滤器,详细功能如下:

    1)$(:nth-child(even))能选取每个父元素下的索引值是偶数的元素

    2)$(:nth-child(odd))能选取到每个父元素下的索引值是奇数的元素

    3)$(:nth-child(2))能选取到每个父元素下索引值等于2的元素

    4)$(:nth-child(3n))能选取到每个父元素下索引值是3的倍数的元素(n从1开始)

    5)$(:nth-child(3n+1))能选取每个父元素下索引值是(3n+1)的元素(n从1开始)

  示例: 

1   //选取每个父元素下的第2个子元素
2   $(‘div.one :nth-child(2)‘).css("background","#bbffaa");
3   //选取每个父元素下的第一个子元素
4   $(‘div.one :first-child‘).css("background","#bbffaa");
5   //选取每个父元素下的最后一个子元素
6   $(‘div.one :last-child‘).css("background","#bbffaa");
7   //如果父元素下的仅仅只有一个子元素,那么选中这个子元素
8   $(‘div.one :only-child‘).css("background","#bbffaa");

 

   6)表单对象过滤选择器:对所选择的表单进行过滤

    1)$(:enabled)选取所有可用元素,$("#form :enabled");选取id为"form"的表单内的所有可用元素

    2)$(:disabled)选取所有不可用的元素,$("#form :enabled");选取id为"form"的表单内的所有不可用元素

    3)$(:checked)选取所有被选中的元素(单选框,复选框),$("input:checked")选取所有被选中的<input>元素

    4)$(:selected)选取所有被选中的选项元素(下拉列表),$("select option:selected")选取所有被选中的选项元素

  示例: 

 1   //对表单内 可用input 赋值操作.
 2   $(‘#btn1‘).click(function(){
 3   $("#form1 input:enabled").val("这里变化了!");  
 4       return false;
 5   })
 6   //对表单内 不可用input 赋值操作.
 7   $(‘#btn2‘).click(function(){
 8   $("#form1 input:disabled").val("这里变化了!");
 9       return false;
10   })
11  
12       
13   //使用:checked选择器,来操作多选框.
14 $(":checkbox").click(countChecked);
15 
16 function countChecked() {
17   var n = $("input:checked").length;
18   $("div").eq(0).html("<strong>有"+n+" 个被选中!</strong>");
19 }
20 
21 countChecked();//进入页面就调用.
22 
23  //使用:selected选择器,来操作下拉列表.
24 $("select").change(function () {
25       var str = "";
26       $("select :selected").each(function () {
27             str += $(this).text() + ",";
28       });
29       $("div").eq(1).html("<strong>你选中的是:"+str+"</strong>");
30 }).trigger(‘change‘);
31 // trigger(‘change‘) 在这里的意思是:
32 // select加载后,马上执行onchange.
33 // 也可以用.change()代替.

 

(4)表单选择器:方便的获取到表单的某个或者某类型的元素

  1)$(":input")选取所有的<input>,<textarea>,<select>,<button>元素

  2)$(":text")选取所有的单行文本框

  3)$(":password")选取所有的密码框

  4)$(":radio")选取所有的单选框

  5)$(":checkbox")选取所有的多选框

  6)$(":submit")选取所有的提交按钮

  7)$(":image")选取所有的图像按钮

  8)$(":reset")选取所有的重置按钮

  9)$(":button")选取所有的按钮

  10)$(":file")选取所有的上传域

  11)$(":hidden")选取所有的不可见元素

示例:

技术分享
 1     var $alltext = $("#form1 :text");
 2     var $allpassword= $("#form1 :password");
 3     var $allradio= $("#form1 :radio");
 4     var $allcheckbox= $("#form1 :checkbox");
 5 
 6     var $allsubmit= $("#form1 :submit");
 7     var $allimage= $("#form1 :image");
 8     var $allreset= $("#form1 :reset");
 9     var $allbutton= $("#form1 :button"); // <input type=button />  和 <button ></button>都可以匹配
10     var $allfile= $("#form1 :file");
11     var $allhidden= $("#form1 :hidden"); // <input type="hidden" />和<div style="display:none">test</div>都可以匹配.
12     var $allselect = $("#form1 select");
13     var $alltextarea = $("#form1 textarea");
14     
15     var $AllInputs = $("#form1 :input");
16     var $inputs = $("#form1 input");
17 
18     $("div").append(" 有" + $alltext.length + " 个( :text 元素)<br/>")
19             .append(" 有" + $allpassword.length + " 个( :password 元素)<br/>")
20             .append(" 有" + $allradio.length + " 个( :radio 元素)<br/>")
21             .append(" 有" + $allcheckbox.length + " 个( :checkbox 元素)<br/>")
22             .append(" 有" + $allsubmit.length + " 个( :submit 元素)<br/>")
23             .append(" 有" + $allimage.length + " 个( :image 元素)<br/>")
24             .append(" 有" + $allreset.length + " 个( :reset 元素)<br/>")
25             .append(" 有" + $allbutton.length + " 个( :button 元素)<br/>")
26             .append(" 有" + $allfile.length + " 个( :file 元素)<br/>")
27             .append(" 有" + $allhidden.length + " 个( :hidden 元素)<br/>")
28             .append(" 有" + $allselect.length + " 个( select 元素)<br/>")
29             .append(" 有" + $alltextarea.length + " 个( textarea 元素)<br/>")
30             .append(" 表单有 " + $inputs.length + " 个(input)元素。<br/>")
31             .append(" 总共有 " + $AllInputs.length + " 个(:input)元素。<br/>")
32             .css("color", "red")
33 
34     $("form").submit(function () { return false; }); // return false;不能提交.
View Code

 

 

 

作者:溯雪snow  http://www.cnblogs.com/lkxsnow

 

本页版权归作者和博客园所有,转载请注明出处

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。