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 相关文章推荐
jQuery解决iframe高度自适应代码
Dec 20 Javascript
5个最佳的Javascript日期处理类库分享
Apr 15 Javascript
JQuery对class属性的操作实现按钮开关效果
Oct 11 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
Dec 02 Javascript
js对table的td进行相同内容合并示例详解
Dec 27 Javascript
浅谈 jQuery 事件源码定位问题
Jun 18 Javascript
简介AngularJS的HTML DOM支持情况
Jun 17 Javascript
js编写一个简单的产品放大效果代码
Jun 27 Javascript
利用Javascript仿Excel的数据透视分析功能
Sep 07 Javascript
基于vue实现swipe分页组件实例
May 25 Javascript
解决jQuery使用append添加的元素事件无效的问题
Aug 30 jQuery
js与jquery获取input输入框中的值实例讲解
Feb 27 jQuery
关于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
php代码把全角数字转为半角数字
2007/12/10 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
php实现网站留言板功能
2015/11/04 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
JScript中的&quot;this&quot;关键字使用方式补充材料
2007/03/08 Javascript
学习JS面向对象成果 借国庆发布个最新作品与大家交流
2009/10/03 Javascript
为原生js Array增加each方法
2012/04/07 Javascript
Jquery中&quot;$(document).ready(function(){ })&quot;函数的使用详解
2013/12/30 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
js实现图片缓慢放大缩小效果
2016/08/02 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
Python装饰器基础概念与用法详解
2018/12/22 Python
Django静态资源部署404问题解决方案
2020/05/11 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
历史专业个人求职信分享
2013/12/20 职场文书
单位婚育证明范本
2014/11/21 职场文书
公司2014年度工作总结
2014/12/10 职场文书
MySQL锁机制
2021/04/05 MySQL
Go使用协程交替打印字符
2021/04/29 Golang
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
宝塔更新Python及Flask项目的部署
2022/04/11 Python
Nginx HTTP跳转至HTTPS
2022/05/15 Servers
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS