深入学习jQuery选择器系列第四篇——过滤选择器之属性选择器
前面的话
属性过滤选择器的过滤规则是通过元素的属性来获取相应的元素,对应于CSS中的属性选择器。属性过滤选择器可分为简单属性选择器、具体属性选择器和条件属性选择器三种。本文将详细该部分内容
简单属性选择器
[attribute]
[attribute]选择器选择拥有该属性的元素,返回集合元素
//选择拥有title属性的所有元素
$('[title]')
//选择拥有title属性的所有span元素
$('span[title]')
//选择同时拥有title属性和id属性的所有span元素
$('span[id][title]')
<button id="btn1" style="color: red;">$('[title]')</button>
<button id="btn2" style="color: blue;">$('span[title]')</button>
<button id="btn3" style="color: green;">$('span[id][title]')</button>
<button id="reset">还原</button>
<div>
<span title="span0">span0</span>
<span>span1</span>
<span title="span2">span2</span>
<i title="i0">i0</i>
<span id="span3" title="span3">span3</span>
<i>i1</i>
</div>
<script>
reset.onclick = function(){history.go();}
//选择拥有title属性的所有元素,结果是span0、span2、i0、span3
btn1.onclick = function(){$('[title]').css('color','red');}
//选择拥有title属性的所有span元素,结果是span0、span2、span3
btn2.onclick = function(){$('span[title]').css('color','blue');}
//选择同时拥有title属性和id属性的所有span元素,结果是span3
btn3.onclick = function(){$('span[id][title]').css('color','green');}
</script>
对应于CSS的简单属性选择器
[title]{color:red;}
span[title]{color:blue;}
span[id][title]{color:green;}
如果使用javascript实现类似$('span[id][title]').css('color','green')的效果
var spans = document.getElementsByTagName('span');
for(var i = 0; i < spans.length; i++){
if((spans[i].id != '') && (spans[i].title != '')){
spans[i].style.color = 'green';
}
}
具体属性选择器
[attribute=value]
[attribute=value]选择器选择属性值为value的元素,返回集合元素
//选择class值为test的元素
$('[class="test"]')
//选择class值为test的span元素
$('span[class="test"]')
//选择class值为test span的span元素
$('span[class="test span"]')
//选择class值为span test的span元素
$('span[class="span test"]')
严格匹配
[注意]具体属性选择器的匹配属于严格匹配
【1】$('[class="test"]')匹配class属性只有test值的情况;而class="test test1"将不会被匹配
【2】[class="a1 a2"]和[class="a2 a1"]并不相同,它们分别只严格匹配class="a1 a2"和class="a2 a1"的元素
<button id="btn1" style="color: red;">$('[class="test"]')</button>
<button id="btn2" style="color: blue;">$('span[class="test"]')</button>
<button id="btn3" style="color: green;">$('span[class="test span"]')</button>
<button id="btn4" style="color: pink;" >$('span[class="span test"]')</button>
<button id="reset">还原</button>
<div>
<span class="test">span0</span>
<span>span1</span>
<span class="span test">span2</span>
<i class="test">i0</i>
<span class="test span">span3</span>
<i>i1</i>
</div>
<script>
reset.onclick = function(){history.go();}
//选择class属性只是'test'的所有元素,结果是span0、i0
btn1.onclick = function(){$('[class="test"]').css('color','red');}
//选择class属性只是'test'的所有span元素,结果是span0
btn2.onclick = function(){$('span[class="test"]').css('color','blue');}
//选择class属性是'test span'的所有span元素,结果是span3
btn3.onclick = function(){$('span[class="test span"]').css('color','green');}
//选择class属性是'span test'的所有span元素,结果是span2
btn4.onclick = function(){$('span[class="span test"]').css('color','pink');}
</script>
对应于CSS选择器的具体属性选择器
[class="test"]{color:red;}
span[class="test"]{color:blue;}
span[class="test span"]{color:green;}
span[class="span test"]{color:pink;}
如果使用javascript实现类似$('span[class="span test"]').css('color','pink')的功能
var spans = document.getElementsByTagName('span');
for(var i = 0; i < spans.length; i++){
if(spans[i].className == 'span test'){
spans[i].style.color = 'pink';
}
}
id选择器
在CSS选择器,id选择器和id属性选择器并不相同,因为它们的优先级不同。而jQuery选择器,并没有优先级的概念,如果两个选择器对相同id属性同时设置,则后面覆盖前面
<button id="btn1">$('#test')在后</button>
<button id="btn2">$('[id="test"]')在后</button>
<button id="reset">还原</button>
<div id="test" style="height:20px;">测试内容</div>
<script>
reset.onclick = function(){history.go();}
btn1.onclick = function(){
$('[id="test"]').css('color','blue');
$('#test').css('color','red');
}
btn2.onclick = function(){
$('#test').css('color','red');
$('[id="test"]').css('color','blue');
}
</script>
条件属性选择器
条件属性选择器共包括6种,其中[attribute!=value]选择器是jQuery自己拓展的选择器
[attribute!=value]
[attribute!=value]选择器选择属性值不等于value的元素,返回集合元素
[注意]class="test test1"的元素也符合$('[class!="test"]')的情况,因为属性选择器的严格匹配机制
[attribute^=value]
[attribute^=value]选择器选择属性值以value开始的元素,返回集合元素
[attribute$=value]
[attribute$=value]选择器选择属性值以value结束的元素,返回集合元素
[attribute*=value]
[attribute*=value]选择器选择属性值包含value的元素,返回集合元素
[attribute|=value]
[attribute|=value]选择器选择属性值等于value或以value-开头的元素,返回集合元素
[attribute~=value]
[attribute~=value]选择器选择属性值用空格分隔的值中包含value的元素,返回集合元素
[注意]$('[class~="test"]')选择器包含class="test"的元素的情况
<button id="btn1" style="color: red;">!=</button>
<button id="btn2" style="color: blue;">^=</button>
<button id="btn3" style="color: green;">$=</button>
<button id="btn4" style="color: pink;" >*=</button>
<button id="btn5" style="color: gray;" >|=</button>
<button id="btn6" style="color: orange;" >~=</button>
<button id="reset">还原</button>
<div>
<span>1</span>
<span class="test">2</span>
<span class="test1">3</span>
<span class="is-test">4</span>
<span class="test test1">5</span>
<span class="test-1">6</span>
</div>
<script>
reset.onclick = function(){history.go();} //选择class属性不是'test'的所有元素,结果是1、3、4、5、6
btn1.onclick = function(){$('div [class!="test"]').css('color','red');} //选择class属性以'test'开始的所有元素,结果是2、3、5、6
btn2.onclick = function(){$('div [class^="test"]').css('color','blue');} //选择class属性以'test'结束的所有元素,结果是2、4
btn3.onclick = function(){$('div [class$="test"]').css('color','green');} //选择class属性包含'test'的所有元素,结果是2、3、4、5、6
btn4.onclick = function(){$('div [class*="test"]').css('color','pink');} //选择class属性等于'test'或以'test-'开头的所有元素,结果是2、6
btn5.onclick = function(){$('div [class|="test"]').css('color','gray');} //选择class属性在用空格分隔的值包含'test'的所有元素,结果是2、5
btn6.onclick = function(){$('div [class~="test"]').css('color','orange');}
</script>
对应于CSS选择器中的部分属性选择器
[注意]由于[attribute!=value]是jQuery自己拓展的,所以并没有对应的CSS选择器
[class^="test"]{color:blue;}
[class$="test"]{color:green;}
[class*="test"]{color:pink;}
[class!="test"]{color:gray;}
[class~="test"]{color:orange;}
如果使用javascript实现类似$('span[class~="test"]').css('color','orange')的功能
var spans = document.getElementsByTagName('span');
for(var i = 0; i < spans.length; i++){
if(/^test\s|\stest\s|\stest$|^test$/.test(spans[i].className)){
spans[i].style.color = 'orange';
}
}
最后
属性选择器的功能十分强大,特别是条件属性选择器,基本覆盖属性值的各种情况。但在实际中,使用属性选择器却寥寥,可能是因为使用javascript或jQuery多用于改变元素属性值,所以使用属性值作为选择标准并不稳定
欢迎交流
深入学习jQuery选择器系列第四篇——过滤选择器之属性选择器的更多相关文章
- 深入学习jQuery选择器系列第三篇——过滤选择器之索引选择器
× 目录 [1]通用形式 [2]首尾索引 [3]奇偶索引[4]范围索引 前面的话 上一篇介绍了过滤选择器中的子元素选择器部分,本文开始介绍极易与之混淆的索引选择器 通用形式 $(':eq(index) ...
- 深入学习jQuery选择器系列第六篇——过滤选择器之状态选择器
× 目录 [1]焦点状态 [2]哈希状态 [3]动画状态[4]显隐状态 前面的话 过滤选择器的内容非常多,本文介绍过滤选择器的最后一部分——状态选择器 焦点状态 :focus :focus选择器选择当 ...
- 深入学习jQuery选择器系列第五篇——过滤选择器之内容选择器
× 目录 [1]contains [2]empty [3]parent[4]has[5]not[6]header[7]lang[8]root 前面的话 本文介绍过滤选择器中的内容选择器.内容选择器的过 ...
- 深入学习jQuery选择器系列第八篇——过滤选择器之伪子元素选择器
× 目录 [1]通用形式 [2]反向形式 [3]首尾元素 [4]唯一元素 前面的话 本文是子元素选择器的续篇,主要介绍关于nth-of-type()选择器的内容.该部分内容并非没有出现在<锋利的 ...
- 深入学习jQuery选择器系列第二篇——过滤选择器之子元素选择器
× 目录 [1]通用形式 [2]反向形式 [3]首尾元素 [4]唯一元素 前面的话 在上一篇中已经介绍过基础选择器和层级选择器,本文开始介绍过滤选择器.过滤选择器是jQuery选择器中最为庞大也是最为 ...
- jQuery选择器之属性选择器Demo
测试代码: 06-属性选择器.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...
- html 选择器之属性选择器
属性选择器的主要作用个人的理解就是对带有指定属性的元素设置css样式. 使用css3的属性选择器,可以指定元素的某个属性,也可以指定某个属性和这个属性所对应的值. css3的属性选择器主要包括下面几种 ...
- 晨读笔记:CSS3选择器之属性选择器
一.属性选择器 1.E[foo^="bar"]:该属性选择器描述的是选择属性以bar开头的元素,如: //所有以名称g_开头的div的字体颜色为红色div[name^=" ...
- CSS3选择器之属性选择器
一.属性选择器 1.E[foo^="bar"]:该属性选择器描述的是选择属性以bar开头的元素,如: //所有以名称g_开头的div的字体颜色为红色div[name^=" ...
随机推荐
- 半吊子学习Swift--天气预报程序-准备工作
MacBookPro买完快半年了,当初想着买个本本学点ios,买完就看了几天的教程[捂脸],最近发现人都要废了,想重新开始学习Swift并将每天的进程通过博客发布来督促自己. 由于文笔不好,接触Swi ...
- iOS特性一 关闭系统日志打印
解决办法 (1)Product -->Scheme -->Edit Scheme -->Run -->Arguments (2)添加一个属性值OS_ACTIVITY_MODE: ...
- iOS开发之记录用户登录状态
iOS开发之记录用户登录状态 我们知道:CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登陆状态.例如微信 ...
- Google Authentication的实现 - Odoo 安全登录
在前边的一篇文章中,我们提到了利用二次验证增强Odoo登录的可靠性:http://www.cnblogs.com/kfx2007/p/6023991.html 今天我们来具体实现这一步: 后端的实现 ...
- JDBC的连接和操作
package Test; import java.sql.*; public class Test21 { public static void main(String[] args) { Conn ...
- 编译链接 C++
预处理之后的源文件被称为一个编译单位,也即编译器的工作对象.为了使编译能够进行,程序员必须提供各种程序其他部分的声明来孤立分析一个编译单位.所有名字空间,类,函数都应该在他们所在的编译单位中有声明,所 ...
- Js函数的概念、作用、创建、调用!
一.函数是用来帮助我们封装.调用代码的最方便的工具! 二.函数的创建方法有三种: 三.函数的创建方式有3种,调用方式也不是单一的,调用方式有4种! 1.作为一个函数去调用 函数名+();(函 ...
- 如何创建一个Edge 浏览器扩展
随着微软Windows 10 年度更新的发布,数次延宕的Edge 扩展功能终于得到了官方正式支持.我在我的另外一个博客上发布了如何创建一个Edge 浏览器扩展的博文,链接如下: https://blo ...
- CoolPlist 帧动画自动生成工具
工具英文名称:CoolPlist作者: 陈前帆 thinkingMan | sonny 邮箱: 625936034@qq.com | chenqianfan1@163.com电话: 136704713 ...
- nginx 启动不了的小问题
nginx 配置的端口可能没打开 linux打开端口: /sbin/iptables -I INPUT -p tcp --dport 8011 -j ACCEPT #开启8011端口 /etc/ ...