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使用手册之三 CSS操作
Mar 24 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
Aug 16 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
Jan 13 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
Jul 17 Javascript
Angular实现双向折叠列表组件的示例代码
Nov 21 Javascript
Angular实现可删除并计算总金额的购物车功能示例
Dec 26 Javascript
vue动态路由配置及路由传参的方式
May 23 Javascript
vue中设置、获取、删除cookie的方法
Sep 21 Javascript
在小程序中推送模板消息的实现方法
Jul 22 Javascript
JS如何寻找数组中心索引过程解析
Jun 01 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
Aug 03 Javascript
如何使用原生Js实现随机点名详解
Jan 06 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
PHP 文件扩展名 获取函数
2009/06/03 PHP
PHP定时执行计划任务的多种方法小结
2011/12/19 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
2013/06/06 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
2018/03/23 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python正则表达式re模块详解
2014/06/25 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
python3中zip()函数使用详解
2018/06/29 Python
python pandas模块基础学习详解
2019/07/03 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
序列化Python对象的方法
2020/08/01 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
护士自我评价
2014/02/01 职场文书
项目建议书怎么写
2014/05/15 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
科学发展观标语
2014/10/08 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
个人贷款收入证明
2014/10/26 职场文书
迎新生欢迎词
2015/01/23 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python
详解Java实践之建造者模式
2021/06/18 Java/Android