博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入学习jQuery选择器系列第八篇——过滤选择器之伪子元素选择器
阅读量:5972 次
发布时间:2019-06-19

本文共 3572 字,大约阅读时间需要 11 分钟。

前面的话

  本文是的续篇,主要介绍关于nth-of-type()选择器的内容。该部分内容并非没有出现在《锋利的jQuery》一书中,nth-of-type()选择器参照CSS中的nth-of-type选择器,于1.9版本新增,本文将详细介绍该内容

 

通用形式

:nth-of-type()

  个人认为,:nth-of-type()选择器不应该归类于子元素选择器,也不完全等同,因为其索引是指特定元素的索引,但索引是从1开始的,而且返回的是集合元素。所以,我把其称之为伪子元素选择器

$('div span:nth-of-type(2)').css('color','red');

  对应于CSS的:nth-of-type()选择器

div span:nth-of-type(2){
color:red;}

  如果使用javascript实现类似效果

var divs = document.getElementsByTagName('div');for(var i = 0; i < divs.length; i++){    var span2 = divs[i].getElementsByTagName('span')[1];    if(span2){        span2.style.color = 'red';    }}
1.1
1.2
1.3
2.1
2.2
2.3

  当然$(':nth-of-type(index)')选择器作为通用形式,可以有多种参数选择

  【1】$(':nth-of-type(even)') 选取所有索引值为偶数的元素

  【2】$(':nth-of-type(odd)') 选取所有索引值为奇数的元素

  【3】$(':nth-of-type(3n+1)') 选取所有索引值为(3n+1)的元素

1
2
3
4
5
6

反向形式

:nth-last-of-type()

  :nth-last-of-type()选择器选择所有第n个元素,但计数从最后一个元素到第一个

$('div :nth-last-of-type(even)').css('color','red');

  对应的CSS选择器是:nth-last-of-type()

div :nth-last-of-type(even){
color:red;}

  如果使用javascript实现类似效果

var divs = document.getElementsByTagName('div');for(var i = 0; i < divs.length; i++){    var children = divs[i].children;    var lastName = '';    //从后往前数    for(var j = children.length; j > -1; j--){        //标签第一次出现或奇数次出现        if(children[j].nodeName != lastName){            children[j].style.color = 'red';            lastName = children[j].nodeName;        //标签第二次出现或偶数次出现        }else{            lastName = '';        }    }}
1
2
3
4
5
6

首尾元素

$(':first-of-type')

  :first-of-type选择器是:nth-of-type(1)选择器的简写形式,选取所有相同元素中的首个元素

$(':last-of-type')

  类似地,$(':last-of-type')选择器选取所有相同元素中的最后一个元素

1.1
1.2

2.1 2.2

3.1
3.2

  首尾伪子元素选择器分别对应于CSS中的:first-of-type和:last-of-type

  如果要完成同样的功能,选择器格式分别为: 

div :first-of-type{
color:red;}div :last-of-type{
color:blue;}div span:first-of-type{
color:green;}div span:last-of-type{
color:pink;}

  如果使用javascript选择器要完成上面的最后一个功能,则如下所示

var divs = document.getElementsByTagName('div');for(var i = 0; i < divs.length; i++){    var spans = divs[i].getElementsByTagName('span');    spans[spans.length-1].style.color = 'pink';}

 

唯一元素

:only-of-type()

  :only-of-type()选择器选择出所有没有具有相同名称的兄弟元素的元素

$('div span:only-of-type').css('color','green');

  对应于CSS的:only-of-type选择器

div span:only-of-type{
color:green;}

  如果使用javascript实现,则如下所示

var divs = document.getElementsByTagName('div');for(var i = 0; i < divs.length; i++){    var spans = divs[i].getElementsByTagName('span');    if(spans.length == 1){        divs[i].spans[0].color = 'green';    }}
1.1
1.2
1.3
2.1
2.2

最后

  终于把jQuery选择器系列完结了,与相比,内容多了不少。jQuery选择器主要基于,并有所拓展。但实际上,选择器太过丰富也增加了选择的代价,同时也提出了各种选择器选用的性能问题

  如果只有一条路,这条路再难,也得咬牙走下去。如果有10条路,如果时间充足,则可以把10条路都走一遍,找出最轻松的路,也就是性能最好的路;如果时间不足,只能挑一条熟悉的路,但总感觉没选到最轻松的路

  就像:eq()、:nth-child()和:nth-of-type()。方法多了,容易混淆,使用时有多种选择,但要注意区分

  丰富是好事,也是坏事

  库是好事,也是坏事

  以上

转载于:https://www.cnblogs.com/xiaohuochai/p/5813357.html

你可能感兴趣的文章
服务器保存所有用户的操作指令(history)
查看>>
C10K——千万级并发实现的秘密:内核不是解决方案,而是问题所在!(转)
查看>>
InfluxDB使用说明
查看>>
java list按照元素对象的指定多个字段属性进行排序
查看>>
Java二叉树实现及递归与非递归遍历实现
查看>>
HttpContext.Current.Cache 过期时间
查看>>
vue单文件 style important引入样式
查看>>
mac设置多个屏幕显示的问题
查看>>
ThinkPHP登录功能的实现方法
查看>>
贝叶斯、朴素贝叶斯及调用spark官网 mllib NavieBayes示例
查看>>
深入JAVA注解之属性注解
查看>>
解决DoubanFM第三方客户端UI线程与工作线程交互问题
查看>>
Android 开发中判断是否是 Wifi 网络
查看>>
你了解 Assembly.Load 吗?
查看>>
分享Silverlight/Windows8/WPF/WP7/HTML5一周学习导读(5月14日-5月20日)
查看>>
前端攻略系列
查看>>
Perl最佳实践读书笔记-第一章
查看>>
IOS 7 更改导航栏文字到白色
查看>>
2016第22周五
查看>>
VC++ ToolTip的简单使用
查看>>