jquery中选择器感觉是用的特别多并且特别方便的一个方法,今天就在这里详细的记载下大多数常用的选择器,一起学习探讨。

  1.  首先介绍的是css3的选择器,其中包括了标签选择器(div),ID选择器(#ID),类选择器(.class),群组选择器(div1,div2,div3),后代选择器(div1 div2),通配选择器(*),伪类选择器(div:first-child),子选择器(div >  li),临近选择器(div + div),属性选择器(div[id='ID']),后代同胞选择器(div ~ div)等等。
  2. jquery的选择器完全继承了css的选择器,包括css1,css2以及css3。
 <ul class="menu" id="#menu">
<li class="level1">
<a href="#no1">层次1</a>
<ul>
<li>菜单1</li>
<li>菜单2</li>
<li>菜单3</li>
<li>菜单4</li>
</ul>
</li>
<li class="level1">
<a href="#no2">层次2</a>
<ul>
<li>菜单1</li>
<li>菜单2</li>
<li>菜单3</li>
<li>菜单4</li>
</ul>
</li>
<li class="level1">
<a href="#no3">层次3</a>
<ul>
<li>菜单1</li>
<li>菜单2</li>
<li>菜单3</li>
<li>菜单4</li>
</ul>
</li>
<li class="level1">
<a href="#no4">层次4</a>
<ul>
<li>菜单1</li>
<li>菜单2</li>
<li>菜单3</li>
<li>菜单4</li>
</ul>
</li>
</ul>

  其中以上面的html代码段为示例,我们就用jquery去选择和改变它的样式,让他成为一个我们平时所熟悉的导航栏。下面是基于上面这个html代码介绍的jquery常用的过滤器

 /**
* 下面介绍的jquery中最基本的5种选择器
*/
//1 ID选择器,返回的是单个元素
var $menu = $("#menu");
//2 类选择器,返回的是元素集合
var $level = $(".level1");
//3 标签选择器,返回的是元素集合
var $li = $("li");
//4 通配选择器,返回的是元素集合,下面实例的是返回menu下的所有的元素
var $all = $("#menu *");
//5 群组选择器,返回的是元素集合,下面实例中返回的是所有的ul和 class = level1的元素
var $menuAndLevel1 = $("ul,.level1");
/**
* 其实我们已经可以用上面的选择器完成大部分的工作了。但是jquery选择器的魅力不仅仅于此。
* 下面介绍的是jquery的层次选择器
*/ //1 后代元素选择器,返回的是元素的集合。这里返回的包括了#menu下面所有的li元素
var $childrenLi = $("#menu li");
//2 直接后代元素选择器,返回的是元素的集合。这里返回的#menu下面第一层的li,例子中的是包含class="level1"的li元素
var $childrenFirstLi = $("#menu>li");
//3 临近元素选择器,返回集合元素。这里返回的ul集合,如果a的后面不是ul,则返回为空
var $nextUl = $("a + ul");
//4 后代同胞选择器,返回集合元素。这里返回的是第一个class="level1"之后的同胞li元素。这里的first代表的所选集合中的第一个元素,下面会讲到。
var $nextSiblings = $("ul > li:first ~ li");
//5 其中3中临近元素选择器中的方法还可用下面这种方法代替,next()中的参数是一种选择器,如果没有参数,则默认选择下一个元素,相当于next("*")
//下面的3中方法所得到的结果是相同的
var $nextUl2 = $("a").next("ul");
var $nextUl3 = $("a").next();
var $nextUl4 = $("a").next("*");
//6 4中的方法也有可以代替的方法,nextAll()方法具体和next方法差不多。选择当前元素之后的所匹配的所以元素
var $nextSiblings2 = $("ul > li:first").nextAll("li");
var $nextSiblings3 = $("ul > li:first").nextAll();
var $nextSiblings4 = $("ul > li:first").nextAll("*");
//7 jquery中还有一种和nextAll类型,但是不完全相同的方法。siblings(),其中返回的是所匹配的所有元素,不管位置实在当前元素前面还是后面
var $allSiblings = $("ul > li:first").siblings();//返回的结果和上面3个相同。如果选中的li元素是第二个,上面返回3,4的li,而这里返回1,3,4的li /**
* jquery中的过滤选择器的规则和css中伪类选择器语法相同,就是通过:开头
*/ //1 :first 选择器。返回的是单个元素。返回删选集合中的第一个li
var $fisrtLi = $("ul li:first");
//2 :last 选择器。返回的是单个元素。返回删选集合中的最后一个li
var $lasttLi = $("ul li:last");
//3 :not 选择器。返回的是元素集合。返回不包含class的li。not中参数和普通选择器一模一样,不用包含单双引号。
var $liNotClass = $("li:not(.level1)");
//4 :even 选择器。返回的是元素集合。返回选中集合中序列为偶数的集合。(从0开始,0算做偶数)
var $evenLi = $("li:even");
//5 :odd 选择器。返回的是元素集合。返回所选中集合中序列为奇数的集合。
var $oddLi = $("li:odd");
//6 :eq 选择器。返回的单个元素。 返回所选择集合中序列和和传进来相同的元素。从0开始算起.返回的是第二个li元素(层次1下的第一个li)
var $indexLi = $("li:eq(1)");
//7 :gt,:lt 选择器。gt(index)是返回所选中集合中索引大于index的集合。lt(index)是返回索引小于index的集合
var $gtIndex = $("li:gt(0)");//返回第一个开始以后的li
var $ltIndex = $("li:lt(10)");//返回第10个以前的li
var $bIndex = $("li:lt(10):gt(2)");//返回的元素个数是7个。如果顺序呼唤,返回的元素个数是10个
var $cIndex = $("li:gt(2):lt(10)");//返回的元素个数是10个。因为lt:(10)是对gt(2)以后的集合在过滤。gt(2)返回的个数大于10个
//8 还有:header(标题元素选择器,如h1,h2),:animated(选取正在执行动画的所有元素),:focus选择器(选取当前获得焦点的元素)。
//都是返回元素集合。但是这里没用到。所以不详细介绍了。 /**
* jquery内容过滤选择器
*/ //1 文本过滤选择器。返回的是元素集合。返回文本中包含“层次”的a元素
var $textA = $("a:contains('层次')");
//2 :empty 选择器。返回的是元素集合。返回不包含任何子元素或者文本的空元素。这里没有该元素
//3 :has(selector) 含有选择器。返回元素集合。下面返回的是所有包含a元素的li元素
var $hasALi = $("li:has(a)");
//4 :parant 选择器。返回元素集合。这个是和empty选择器相对的选择器。下面返回包含子元素或文本元素的li
var $notEmptyLi = $("li:parent");
//5 :hidden 过滤器。返回元素集合。不可见元素包括任何的隐藏,不管是通过displty:none还是hidden=hidden或者type="hidden"。
//6 :visible 过滤器。返回元素集合。返回所有可见的li元素。与:hidden过滤器正好相反。
var $notHideLi = $("li:visible"); /**
* jquery属性过滤选择器。由于属性选择过滤器平时用的不太多,这里就简略介绍下。以下用class举例,可以包括所有的属性。
* 属性选择器直接跟在需要过滤的元素后面,不包含空格。如果含有空格,则会对元素的所有子元素进行属性过滤。相当于“selector *[]”
*/
var $li1 = $("li[class]");//选择属性中含所有class的li元素
var $a1 = $("a[href=\\#no1]");//选择属性中含有href且href的值为#no1的元素。#在jquery中是特殊字符。需要转译
var $a2 = $("a[href!=\\#no1]");//返回href不等于#no1的a元素。特别注意,如果a中不含有href,也会被返回
var $li2 = $("li[class ^= level]")//返回以level开头的class的li
var $li3 = $("li[class $= 1]");//返回1结尾的class的li
var $li4 = $("li[class *= vel]");//返回class中包含vel的li
var $li5 = $("li[class |= level1]");//返回class等于level1或者以level1为前缀,后面用连字符'-'的元素。类似level1-no1
var $li6 = $("li[class ~= level1]");//返回class中用空格分隔的值中包含level1的li元素。类似level1或者level1 level2。这里返回值同$li5
var $Li7 = $("li[class ^= lev][class *=vel][class $= 1]");//符合选择器。选出满足所有条件的元素。每选择一次,范围缩小。 /**
* jquery中的子元素过滤器。个人感觉这个过滤器十分的方便好用
*/ //1 :nth-child 选择器。这个选择器很强大!可以使用index(序列,从1开始),even,odd,2n,2n-1,3n(n都是从1开始)等等。
//其中所过滤元素的索引是在其父元素下面的索引,而不是所筛选出来的集合中的索引。这点很重要,也是和eq的区别之一。
//eq的索引是筛选出来的集合的索引。nth-child的规则和css中的规则一模一样,详细可以参考css的规则
var $everyFirstLi = $("li:nth-child(1)");//这里返回的li有5个。只要li元素在其父元素下是第一个元素,就会被筛选出来
var $firstLi = $("li:first-child");//同上,也是返回5个li元素
var $lastLi = $("li:last-child");//只要li元素是在其父元素的最后一个,就会被筛选出来
var $everyLastLi = $("li:nth-last-child(2)");//只要li在其父元素的倒数第二个,就会被返回
var $onlyLi = $("li:only-child");//返回父元素中仅有一个li的li。这个返回为空 /**
* 还有表单元素过滤,由于这里时间问题。就不写表单元素了。但是表单过滤器可以稍微介绍下。返回的都是元素集合
* :enabled 选取所有可用元素 $(":enabled");
* :disabled 选取所有不可用元素 $(":disabled");
* :checked 选取单选框或复选框中勾选中的元素 $(":checked");
* :selected 选取下拉框中选中的选项元素 $(":selected");
* :input 选取所有的<input> <textarea> <select> <button> 元素。$(":input");
* :text 选取所有单行文本框 $(":text");
* :password 选取所有密码框 $(":password");
* :radio 选取所有单选框 $(":radio");
* :checkbox 选取所有多选框 $(":checkbox");
* :submit 选取所有提交按钮 $(":submit");
* :image 选取所有图像按钮 $(":image");
* :reset 选取所有重置按钮 $(":reset");
* :button 选取所有按钮 $(":button");
* :file 选取文件上传域 $(":file");
* :hidden 选取所有不可见元素 $(":hidden");
*
* 上面的元素是等同于$("*:enabled");当然*也可以换成其他的选择器或者选择器组合
* 到这里jquery的选择器介绍的基本差不多了。有了这么多的选择器,选择自己想要的元素实在太轻而易举了
*/

  基于上面的选择器种类,可以随便组合几种就可以写出一个普通的手风琴系列的导航菜单,我这里就随便写一个。通过两行代码就可以实现整个导航菜单,足以体现jquery中选择器的强大之处,当然读者可以使用比我下面这个简单的多的多的方法实现导航菜单。如果html中代码写的巧妙会更简便,这里只做示范用不讲究那么多了。

             $(document).ready(function(){
$("#menu li[class=level1]:not(:first) ul").hide();//把不是第一个的包含ul的li的ul给隐藏掉
$("ul a[href ^= \\#no]").on("click",function(e){//给href中以#no开头的a绑定点击事件
$(this).nextAll("ul").filter(":first").show(500);//点击a元素的所有后面的同胞Ul中的第一个ul。这个不能用find。find是对其子元素的筛选
//filter是对集合本身的筛选
$(this).parent().siblings().find("ul:has(li):contains('菜单')").hide(500);//隐藏a元素的父元素li的所有同胞li(不区分元素),用find
//筛选出包含li元素并且ul中含有菜单文本的ul元素并隐藏
});
});

最初的菜单 实现后的菜单,已经包含点击功能

  

jquery选择器详细说明的更多相关文章

  1. 《锋利的jQuery(第2版)》笔记-第2章-jQuery选择器

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

  2. 深入学习jQuery选择器系列第八篇——过滤选择器之伪子元素选择器

    × 目录 [1]通用形式 [2]反向形式 [3]首尾元素 [4]唯一元素 前面的话 本文是子元素选择器的续篇,主要介绍关于nth-of-type()选择器的内容.该部分内容并非没有出现在<锋利的 ...

  3. 深入学习jQuery选择器系列第四篇——过滤选择器之属性选择器

    × 目录 [1]简单属性 [2]具体属性 [3]条件属性 前面的话 属性过滤选择器的过滤规则是通过元素的属性来获取相应的元素,对应于CSS中的属性选择器.属性过滤选择器可分为简单属性选择器.具体属性选 ...

  4. 深入学习jQuery选择器系列第二篇——过滤选择器之子元素选择器

    × 目录 [1]通用形式 [2]反向形式 [3]首尾元素 [4]唯一元素 前面的话 在上一篇中已经介绍过基础选择器和层级选择器,本文开始介绍过滤选择器.过滤选择器是jQuery选择器中最为庞大也是最为 ...

  5. 二、jquery选择器

    在jquery库中,可以通过选择器实现DOM元素快捷选择这一重要的核心功能. 1.选择器的优势 (1)代码更简单 由于在jquery库中,封装了大量可以通过选择器直接调用的方法或函数,使编写代码更加简 ...

  6. 我人生中的jQuery选择器

    Jquery选择器 一.Jquery选择器简介 JavaScript只是一种运行于客户端,可以被客户端浏览器解析的一段代码.它和java没有任何关系.JavaScript简称JS.jQuery是对JS ...

  7. CSS选择器和jQuery选择器的区别与联系之一

    到底什么是选择器?我们通过常接触的CSS选择器和jQuery选择器理解一下,我们知道CSS是用于分离网页的结构和表现的,也就是说对于一个网页,HTML定义网页的结构,CSS描述网页的样子,一个很经典的 ...

  8. JavaScript(15)jQuery 选择器

    jQuery 选择器 选择器同意对元素组或单个元素进行操作. jQuery 元素选择器和属性选择器同意通过标签名.属性名或内容对 HTML 元素进行选择. 在 HTML DOM 术语中:选择器同意对 ...

  9. 语义化标签和jQuery选择器

    关于语义化标签 https://blog.csdn.net/nongweiyilady/article/details/53885433 更详细的语义化标签:https://www.cnblogs.c ...

随机推荐

  1. DEV GridControl打印 导出

    /// <summary> /// 打印 /// </summary> /// <param name="sender"></param& ...

  2. 2017北京国庆刷题Day2 afternoon

    期望得分:100+100+50=250 实际得分:100+70+50=220 T1 最大值(max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一 ...

  3. HDU 1812 polya 大数

    由于反射的存在,分奇偶讨论其置换的循环节数量,大数用JAVA就好了. import java.math.*; import java.util.*; public class Main{ public ...

  4. HDU 1573 CRT

    CRT模板题 /** @Date : 2017-09-15 13:52:21 * @FileName: HDU 1573 CRT EXGCD.cpp * @Platform: Windows * @A ...

  5. jieba文本分词,去除停用词,添加用户词

    import jieba from collections import Counter from wordcloud import WordCloud import matplotlib.pyplo ...

  6. 实验吧CTF题库之二叉树遍历

    题目链接:http://www.shiyanbar.com/ctf/1868 直接推算出来这棵树是: 后序遍历是:ACBFGED 参考资料: 1. http://www.shiyanbar.com/c ...

  7. Linux命令之uptime

    这是什么 uptime用来查看系统已经启动了多长时间了. 它显示的信息和w命令的头(第一行)是一样一样的. 举个栗子 举一个实际的应用场景: 比如发现服务器上的某些没有加入开机启动的服务挂了一片,这个 ...

  8. Hadoop笔记之搭建环境

    Hadoop的环境搭建分为单机模式.伪分布式模式.完全分布式模式. 因为我的本本比较挫,所以就使用伪分布式模式. 安装JDK 一般Linux自带的Java运行环境都是Open JDK,我们到官网下载O ...

  9. 分享6款国内、外开源PHP轻论坛CMS程序

    第一.Startbbs Startbbs,一款国产个人兴趣分享的轻论坛程序,采用PHP+MYSQL架构,目前版本是V1.1.5,之前我也 有搭建使用过功能还是比较简单的,默认风格比较让普通用户接受,这 ...

  10. videojs做直播、弹幕

    从上一年开始,我们开始接触直播,现在直播成本真的很低,很多CDN供应商都有提供,本文只是大概讲述播放器这个话题. 开始调研 播放格式,我挑了三种.分别是HLS,RTMP,HTTP-FLV. 下面简单说 ...