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 相关文章推荐
Prototype Number对象 学习
Jul 19 Javascript
js常用排序实现代码
Dec 28 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
Oct 23 Javascript
JQuery获取表格数据示例代码
May 26 Javascript
详解AngularJS中的作用域
Jun 17 Javascript
jQuery实现简单的tab标签页效果
Sep 12 Javascript
uploader秒传图片到服务器完整代码
Apr 22 Javascript
基于jQuery Easyui实现登陆框界面
Jul 10 jQuery
vue+element实现表单校验功能
May 20 Javascript
基于Vue的商品主图放大镜方案详解
Sep 19 Javascript
JS实现炫酷轮播图
Nov 15 Javascript
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 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
探讨:如何编写PHP扩展
2013/06/13 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
javascript实现表单提交后,提交按钮不可用的方法
2015/04/18 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
js倒计时抢购实例
2015/12/20 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
Python中的文件和目录操作实现代码
2011/03/13 Python
Python实现全局变量的两个解决方法
2014/07/03 Python
详解Python的Django框架中的templates设置
2015/05/11 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
Python生成随机数组的方法小结
2017/04/15 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
BONIA官方网站:国际奢侈品牌和皮革专家
2016/11/27 全球购物
阿巴庭院:Abba Patio
2019/06/18 全球购物
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
体育老师的教学自我评价分享
2013/11/19 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
如何撰写促销方案?
2019/07/05 职场文书
导游词之山海关
2019/12/10 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
Django基础CBV装饰器和中间件
2022/03/22 Python