jQuery 关于伪类选择符的使用说明


Posted in Javascript onApril 24, 2013

   jQuery选择器的强大不仅在于选择器支持基本的css选择符,还支持很多CSS的伪类选择符,甚至可以自定义选择符,下面让我们来看看一些伪类选择符

  :nth-child的用法
         nth-child是一个css3伪类选择符,在jQuery中被实现了,在Jquery API中对nth-child的定义是:”匹配其父元素下的第N个子或奇偶元素“。读着感觉有点绕口,下面让我们通过例子来说明:

<div>
    <ul>
    <li>one</li>
    <li>two</li>
    <li>three</li>
    <li>four</li>
    <li>five</li>
    <li>six</li>
    <li>seven</li>
    <li>eight</li>
    <li>nine</li>
    </ul>
    <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    </ul>
    </div>
    <script type="text/javascript">
        $("li:nth-child(2)").css("background-color", "blue");
    </script>

运行效果如下:

  jQuery 关于伪类选择符的使用说明    

API定义中的匹配其父辈指的是所选元素的父元素不同,则分开选择。在上面例子中虽然一共选择18个<li>但是这18<li>分属于2个不同的<ul>,所以会选择两个.如果将其放入同一个<ul>中,如果放入同一个<ul>执行上面代码,则:

jQuery 关于伪类选择符的使用说明

理解了上面匹配父辈元素,下面来说说这个选择符参数的用法.

    向上面那样直接给出选择的位置,但是这里注意,这个位置是以1为开始的,而不是0 n个倍数选择法,比如可以使3n+1,-3n+1,4n,等,匹配所有页面上存在的n的倍数

例子:

<div>
    <ul>
    <li>one</li>
    <li>two</li>
    <li>three</li>
    <li>four</li>
    <li>five</li>
    <li>six</li>
    <li>seven</li>
    <li>eight</li>
    <li>nine</li>    </ul>
    </div>
    <script type="text/javascript">
        $("li:nth-child(3n-1)").css("background-color", "blue");
    </script>

效果:

jQuery 关于伪类选择符的使用说明

可见相对应的元素都被匹配

   3.还有一种用法是我们熟知的odd和even,就是奇数和偶数,如下:

   <script type="text/javascript">
        $("li:nth-child(odd)").css("background-color", "blue");
    </script>

效果:

jQuery 关于伪类选择符的使用说明

 

:first-child&last-child

   从上面的nth-child可以看到”匹配父类下的“含义,first-child和last-child也同样是这样.它们可以看做nth-child的封装:

first-child和nth-child(1)等价,这里就不多说了.

而first-child目前我还找不到等价的nth-child表达式,匹配父类下的最后一个子元素:
效果:

jQuery 关于伪类选择符的使用说明

:input并不只是匹配input

   个选择符我想大家都比较熟悉,但是要注意,input伪类选择符不只是匹配<input>标签,还会匹配<select>和<textarea>:

第一个:<input type="input" />
第二个:<select id="select">
</select>
第三个:<textarea></textarea>
<script type="text/javascript">
    alert($(":input").length);//alert 3
</script>   

 可以看到,不光<input>被选择,<select>和<textarea>也被选择了

伪类选择符可以嵌套

   通常情况下,我们可以通过嵌套伪类选择符来达到我们需要的效果,伪类选择符,如下:

<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    </ul>
    <script type="text/javascript">
        $("li:not(:first):not(:last)").css("background-color", "blue");
    </script>

效果:

   jQuery 关于伪类选择符的使用说明

   可见,除了第一个和最后一个li,其它都被选择.当然,嵌套是有层数限制的,具体的次数我就不太清了(各位高手记得麻烦告诉我下),反正够你进行不是变态的使用:-)

自定义伪类选择符

   jquery还提供给我们扩展原有选择符的方式,可以让我们根据自己的需要自定义选择符,下面通过一个有实际意义的例子看如何做到:

   在我们使用jquery的serialize方法将当前表单中的元素提交到服务器时,总是会选上asp.net的ViewState(<input type=”hidden” />)这无疑浪费了好多资源,我们通过一个扩展的伪类选择符看如何不选择它:

<form name="form1" method="post" action="default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGRWxo4mg/noF3+7k/L7nyw13HVnLQ==" />
</div>

    <script type="text/javascript">
        $.expr[":"].noViewState = function(element) {
            return !$(element).attr("id") === "_VIEWSTATE";
        }
        alert($(":input:noViewState").size());//alert 0 ViewState has not been choosen
    </script>
    </form>   

通过$.expr的方式对伪类选择符进行扩展,可以看出,上面的选择符使用:noViewState后,viewState没有被选择. 

小结:

    jQuery的伪类选择符是很强大的一项功能,它内置了很多种方便我们选择的选择符,我们可以嵌套甚至扩展这些伪类选择符.这让我们的js编程更加愉悦了许多.

Javascript 相关文章推荐
Javascript改变CSS样式(局部和全局)
Dec 18 Javascript
html5 canvas js(数字时钟)实例代码
Dec 23 Javascript
javascript替换已有元素replaceChild()使用介绍
Apr 03 Javascript
JavaScript原生对象常用方法总结(推荐)
May 13 Javascript
浅谈JS中逗号运算符的用法
Jun 12 Javascript
5种JavaScript脚本加载的方式
Jan 16 Javascript
打造通用的匀速运动框架(实例讲解)
Oct 17 Javascript
分享ES6的7个实用技巧
Jan 18 Javascript
ndm:NPM的桌面GUI应用程序
Oct 15 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
Oct 30 Javascript
微信小程序渲染性能调优小结
Jul 30 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
Jun 08 Javascript
关于ExtJS4.1:快捷键支持的问题
Apr 24 #Javascript
Jquery实现三层遍历删除功能代码
Apr 23 #Javascript
jQuery获取浏览器中的分辨率实现代码
Apr 23 #Javascript
使用PHP+JQuery+Ajax分页的实现
Apr 23 #Javascript
jQuery写的日历(包括日历的样式及功能)
Apr 23 #Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
Apr 23 #Javascript
js事件冒泡实例分享(已测试)
Apr 23 #Javascript
You might like
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
php数组一对一替换实现代码
2012/08/31 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
在Python的Tornado框架中实现简单的在线代理的教程
2015/05/02 Python
详解Python中的元组与逻辑运算符
2015/10/13 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
基于Django实现日志记录报错信息
2019/12/17 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
EVE LOM英国官网:全世界最好的洁面膏
2017/10/30 全球购物
PHP面试题集
2016/12/18 面试题
汽车电子与维修专业大学生求职信
2013/09/28 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
党员个人公开承诺书
2014/08/29 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
领导参观欢迎词
2015/01/26 职场文书
学校中秋节活动总结
2015/03/23 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书