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. Eclipse 导入Hadoop 2.6.0 源码

    1. 首先前往 官网(Hadoop 2.6 下载地址)上下载Hadoop的源码文件,并解压 2. 事先请确定已经安装好jdk以及maven(Maven安装教程 这是其他人写的一篇博文,保存profil ...

  2. mysql \G

    mysql 命令区分大小写.ego       (\G) Send command to mysql server, display result vertically. go        (\g) ...

  3. 【VSCode】Windows下VSCode编译调试c/c++【更新 2018.03.27】

    --------– 2018.03.27 更新--------- 便携版已更新,点此获取便携版 已知BUG:中文目录无法正常调试 用于cpptools 0.15.0插件的配置文件更新 新的launch ...

  4. 小程序Openid 获取,服务器 encryptedData 解密 遇到的坑

    获取客户 openId 和 unionId 需要以下步骤(都为必须步骤) 1.从验证从客户端传上来code, 获取sessionKey (需要配合小程序appid ,secret 发送到微信服务器) ...

  5. 【leetcode 简单】第三十八题 两数之和 II - 输入有序数组

    给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的下标值( ...

  6. Python自定义web框架、Jinja2

    WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server ...

  7. lintcode 443.岛屿的个数

    在v2ex上看到有人提到了这个,感觉挺简单的,没忍住还是试一下.... 基本的染色法. AC代码: public class Solution { /** * @param grid a boolea ...

  8. 11.Container With Most Water---两指针

    题目链接:https://leetcode.com/problems/container-with-most-water/description/ 题目大意:给出一串数组(a1, a2, a3, .. ...

  9. 014 JVM面试题

    转自:http://www.importnew.com/31126.html 本文从 JVM 结构入手,介绍了 Java 内存管理.对象创建.常量池等基础知识,对面试中 JVM 相关的基础题目进行了讲 ...

  10. Python Random模块生成伪随机数字

    This module implements pseudo-random number generators for various distributions. 对于整数,有一个范围的均匀选择: 对 ...