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 相关文章推荐
Mootools 1.2教程 Tooltips
Sep 15 Javascript
Ajax+Json 级联菜单实现代码
Oct 27 Javascript
JavaScript中的style.display属性操作
Mar 27 Javascript
js propertychange和oninput事件
Sep 28 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
May 26 Javascript
angular+ionic 的app上拉加载更新数据实现方法
Jan 16 Javascript
echarts学习笔记之图表自适应问题详解
Nov 22 Javascript
Node.js使用cookie保持登录的方法
May 11 Javascript
vue中uni-app 实现小程序登录注册功能
Oct 12 Javascript
Vue中keep-alive的两种应用方式
Jul 15 Javascript
Element InputNumber 计数器的实现示例
Aug 03 Javascript
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
PHP文件读写操作之文件写入代码
2011/01/13 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
jQuery 性能优化指南(2)
2009/05/21 Javascript
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
xss文件页面内容读取(解决)
2010/11/28 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
Linux下编译安装php libevent扩展实例
2015/02/14 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
移动前端图片压缩上传的实例
2017/12/06 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
Python实现八皇后问题示例代码
2018/12/09 Python
python实现小世界网络生成
2019/11/21 Python
python Paramiko使用示例
2020/09/21 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
主管职责范文
2013/11/09 职场文书
亚运会口号
2014/06/20 职场文书
公司与个人合作协议书
2016/03/19 职场文书
Python&Matlab实现樱花的绘制
2022/04/07 Python