jQuery 过滤方法filter()选择具有特殊属性的元素


Posted in Javascript onJune 15, 2014

现在有这样一种需求,需要选出所有有背景图片的元素.
这个问题有点棘手.我们无法使用选择表达式来完成这个问题了.
使用jQuery的DOM过滤方法filter(),可以根据函数中表达的任何条件选择元素.

jQuery中的过滤器方法允许传递一个字符串(也就是选择器表达式)作为参数.
或者传递的是一个函数.它的返回值将定义某个元素是否被选中.
传递的函数将对当前选择集中的每个元素运行.
当函数返回假时,对应的函数就从选择集中被删除掉.每当返回值为真的时候,对应的元素
不受影响.

jQuery('*').filter(function(){ 
return !!jQuery(this).css('background'); 
});

上述代码选择所有具有背景图片的元素.
初始集合是所有元素(*).然后以一个函数为参数调用filter().
这个函数在每个集合上进行是否有属性background属性的判断,
如果有,则保留.否则,则在结果集中删除这个元素.

你所看到的!! 是javascript中间任何undefined ,空类型,当然还有false.
如果函数调用返回的是这些值,那么函数返回false,从而在集合中删除

没有background属性的元素.
实际上,!!并不是必要的.因为jQuery将把这些返回值转化为Boolean类型.但是保留仍然是一个好的主意.
这样任何人看到你的代码的时候,都能绝对肯定你的意图.(这有助于代码的可读性).

在传递个filter()的函数中,可以通过this关键字引用当前元素.
将它包含在jQuery函数中就变成了一个jQuery对象了.
this //常规的元素对象.
jQuery(this) //jQuery对象.
下面是激发你想象力的一些例子.

jQuery('div').filter(function(){ 
var width = jQuery(this).width; 
return width >100 && widht < 200; 
}); 
//返回子元素有10个或者20个的元素. 
jQuery('*').filter(function(){ 
var children = jQuery(this).childern().length; 
return children ===10 || children ===20; });

下面是一个代码例子:判断有背景颜色的元素,并将它们的背景颜色全部改为黑色。
<html> 
<head> 
<title></title> 
<style type="text/css"> 
.c1{ 
background-color: yellow; 
} 
.c2{ 
background-color: green; 
} 
p{ 
background-color: pink; 
} 
h3{ 
background-color: gray; 
} 
</style> 
</head> 
<body> 
<div class="c1">Bye Bye Beautiful</div> 
<div class="c2">Nothing but the girl</div> 
<p>The Lazy song</p> 
<h2>If I die young</h2> 
<h3>New soul</h3> 
<script type="text/javascript" src="jquery.2.0.3.js"></script> 
<script type="text/javascript"> 
jQuery(document).ready(function($) { 
var ret = $('*').filter(function(index) { 
return !$(this).css('background-color'); 
}); 
$.each(ret, function(index, val) { 
$(val).css('background-color','black'); 
}); 
}); 
</script> 
</body> 
</html>
Javascript 相关文章推荐
基于JQuery的asp.net树实现代码
Nov 30 Javascript
jQuery EasyUI之DataGrid使用实例详解
Jan 04 Javascript
js+css实现回到顶部按钮(back to top)
Mar 02 Javascript
JS设计模式之惰性模式(二)
Sep 29 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
Nov 17 Javascript
微信小程序上传图片功能(附后端代码)
Jun 19 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
Sep 27 Javascript
angularJs中$scope数据序列化的实例
Sep 30 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
Oct 21 Javascript
jQuery实现王者荣耀手风琴效果
Jan 17 jQuery
vue中英文切换实例代码
Jan 21 Javascript
5个你不知道的JavaScript字符串处理库(小结)
Jun 01 Javascript
Javascript实现简单二级下拉菜单实例
Jun 15 #Javascript
jQuery $.extend()用法总结
Jun 15 #Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
Jun 14 #Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 #Javascript
jQuery Migrate 1.1.0 Released 注意事项
Jun 14 #Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
Jun 14 #Javascript
Ext修改GridPanel数据和字体颜色、css属性等
Jun 13 #Javascript
You might like
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
PHP脚本的10个技巧(5)
2006/10/09 PHP
PHP array_push 数组函数
2009/12/26 PHP
php抓取https的内容的代码
2010/04/06 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
JavaScript静态作用域和动态作用域实例详解
2019/06/17 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
Python文件操作类操作实例详解
2014/07/11 Python
linux下python抓屏实现方法
2015/05/22 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
python获取url的返回信息方法
2018/12/17 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
非常详细的C#面试题集
2016/07/13 面试题
社会实践自我鉴定
2013/11/07 职场文书
班主任工作年限证明
2014/01/12 职场文书
廉洁教育学习材料
2014/05/19 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
放弃继承权公证书
2015/01/23 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server