jQuery遍历DOM节点操作之filter()方法详解


Posted in Javascript onApril 14, 2016

本文实例分析了jQuery遍历DOM节点操作之filter()方法。分享给大家供大家参考,具体如下:

.filter(selector)

此方法用于在匹配元素中按照选择器表达式进行筛选。
记住:使用此方法必须得传入选择器表达式参数,不然会报错“'nodeType' 为空或不是对象”

另外请注意这个filter方法和jquery中的find方法的区别:
filter方法是对匹配元素进行筛选,而find方法是对匹配元素的后代元素进行筛选。

从jquery1.4版本开始,filter方法又添加了两个新的用法,现在一共有四种用法了。

下面来具体看看这四种用法:

一、 .filter(selector)

这种用法是在已匹配的元素中按照给定的selector参数(jquery选择器表达式)进行筛选,然后将匹配的元素包装成jquery元素集合返回。这个方法是用来缩小匹配范围的,selector参数可以是多个表达式用逗号连接起来。

来看例子:

HTML代码:

<ul>
  <li>11111</li>
  <li class="item">22222</li>
  <li>33333</li>
  <li>44444</li>
  <li>55555</li>
  <li>66666</li>
  <li>77777</li>
</ul>

Jquery代码:

$("ul>li").filter(":even").css("color","red");
//将索引为偶数的li背景变为红色

上面的jquery代码和下面的jquery代码效果是一样的

$("ul>li:even").css("color","red");
//将索引为偶数的li背景变为红色

再来看一下选择器表达式用逗号连接起来的用法:

$("ul>li").filter(":even,.item").css("color","blue");
//将索引为偶数和calss为item的li背景变为蓝色

demo示例如下:

<ul>
  <li>11111</li>
  <li class="item">22222</li>
  <li>33333</li>
  <li>44444</li>
  <li>55555</li>
  <li>66666</li>
  <li>77777</li>
</ul>
<input type="button" id="test1" value="获取索引为偶数的li">
<input type="button" id="test2" value="获取索引为偶数和calss为item的li">
<script>
$(function(){
  $("#test1").click(function(){
    $("ul>li").filter(":even").css("color","red");//将索引为偶数的li背景变为红色
    //这个式子和 $("ul>li:even").css("color","red"); 等效
  });
  $("#test2").click(function(){
    $("ul>li").filter(":even,.item").css("color","blue");//将索引为偶数和calss为item的li背景变为蓝色
  });
});
</script>

二、 .filter( function(index) )

这种使用方法是对匹配的元素进行遍历,如果function(index)返回的值为true的话,那么这个元素就被选中,如果返回值为false的话,那么这个元素就不被选中

index参数是当前的匹配元素在原来的元素集合中的索引。

如果您对上面的解释不清楚的话(本人表达能力有点欠缺~^_^),可以好好看看下面的例子:

HTML代码:

<div id="first"></div>
<div id="second"></div>
<div id="third"></div>
<div id="fourth"></div>
<div id="fifth"></div>
<div id="sixth"></div>

jquery代码:

$("div").filter(function(index) {
  return index == 1 || $(this).attr("id") == "fourth";
}).css("border", "5px double blue");

上面代码的结果是 第二个div元素和 id为“fourth”的div元素的边框变成了双线颜色为蓝色

demo示例如下:

<style>
 div{ width:60px; height:60px; margin:5px; float:left;border:3px white solid;background:#ff0000 }
</style>
<div id="first"></div>
<div id="second"></div>
<div id="third"></div>
<div id="fourth"></div>
<div id="fifth"></div>
<div id="sixth"></div>
<br><br><br><br><br><br>
<input type="button" id="test" value="点击我看看上面的div的变化">
<script>
$("#test").click(function(){
  $("div").filter(function(index) {
    return index == 1 || $(this).attr("id") == "fourth";
  }).css("border", "5px double blue");
});
</script>

三、 .filter( element )

element参数为DOM对象,如果element DOM对象和匹配的元素是同一个元素的话,那么这个元素会被匹配。这种用法是1.4版本新加的,我还没想出来有什么用处

看例子吧:

还是对上面的HTML代码,看jquery代码:

$("div").filter(document.getElementById("third")).css("border", "5px double blue");

结果是id为third的div元素边框有变化。

这个例子举得很鸡肋,大家会说何必这么麻烦呢?还不如直接:

$("#third").css("border", "5px double blue");

的确,我也是这样想的,但是既然是1.4版本新加的,那肯定会是有用到的地方的,不会是鸡肋的,只是我的jquery水平还太低,还没发现而已,如果哪位看官有想到用处的话,还望赐教!

demo示例如下:

<style>
 div{ width:60px; height:60px; margin:5px; float:left;border:3px white solid;background:#ff0000 }
</style>
<div id="first"></div>
<div id="second"></div>
<div id="third"></div>
<div id="fourth"></div>
<div id="fifth"></div>
<div id="sixth"></div>
<br><br><br><br><br><br>
<input type="button" id="test" value="点击我看看上面的div的变化">
<script>
$("#test").click(function(){
  $("div").filter(document.getElementById("third")).css("border", "5px double blue");
});
</script>

四、 .filter(jQuery object)

这个用法和上面的.filter( element )的用法差不多,只是一个参数为DOM对象,一个参数为jquery对象,我还是感觉比较鸡肋。

看例子:

同样是对上面的HTML代码,看jquery代码:

$("div").filter($("#third")).css("border", "5px double blue");

结果是id为third的div元素边框有变化。
同样直接用下面的jquery代码会更好:

$("#third").css("border", "5px double blue");

demo示例如下:

<style>
 div{ width:60px; height:60px; margin:5px; float:left;border:3px white solid;background:#ff0000 }
</style>
<div id="first"></div>
<div id="second"></div>
<div id="third"></div>
<div id="fourth"></div>
<div id="fifth"></div>
<div id="sixth"></div>
<br><br><br><br><br><br>
<input type="button" id="test" value="点击我看看上面的div的变化">
<script>
$("#test").click(function(){
  $("div").filter($("#third")).css("border", "5px double blue");
});
</script>

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
教你如何解密js/vbs/vbscript加密的编码异处理小结
Jun 25 Javascript
在myeclipse中如何加入jquery代码提示功能
Jun 03 Javascript
在Node.js应用中读写Redis数据库的简单方法
Jun 30 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
Aug 19 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
Dec 02 Javascript
js传值后台中文出现乱码的解决方法
Jun 30 Javascript
Highcharts学习之坐标轴
Aug 02 Javascript
Vue 仿QQ左滑删除组件功能
Mar 12 Javascript
每周一练 之 数据结构与算法(Stack)
Apr 16 Javascript
vue实现axios图片上传功能
Aug 20 Javascript
JavaScript 判断数据类型的4种方法
Sep 11 Javascript
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 Vue.js
jQuery获取父元素及父节点的方法小结
Apr 14 #Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
Apr 14 #Javascript
Jquery实现$.fn.extend和$.extend函数
Apr 14 #Javascript
详解Jquery实现ready和bind事件
Apr 14 #Javascript
一起学写js Calender日历控件
Apr 14 #Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
Apr 14 #Javascript
原生js实现autocomplete插件
Apr 14 #Javascript
You might like
无线电广播的开始
2002/01/30 无线电
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
php获取新浪微博数据API实例
2013/11/12 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
Python简单生成随机数的方法示例
2018/03/31 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
python 三元运算符使用解析
2019/09/16 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
Python中的面向接口编程示例详解
2021/01/17 Python
python如何修改文件时间属性
2021/02/05 Python
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
竞选部长演讲稿
2014/04/26 职场文书
物业管理专业求职信
2014/06/11 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL
pandas数值排序的实现实例
2021/07/25 Python
python多次执行绘制条形图
2022/04/20 Python