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 相关文章推荐
javascript 限制输入和粘贴(IE,firefox测试通过)
Nov 14 Javascript
jquery easyui combox一些实用的小方法
Dec 25 Javascript
javascript的数组和常用函数详解
May 09 Javascript
js获取当前日期时间及其它操作汇总
Apr 17 Javascript
JavaScript中getUTCMinutes()方法的使用详解
Jun 10 Javascript
js 提交form表单和设置form表单请求路径的实现方法
Oct 25 Javascript
详解JavaScript树结构
Jan 09 Javascript
纯js模仿windows系统日历
Feb 04 Javascript
vue-cli之router基本使用方法详解
Oct 17 Javascript
js注册时输入合法性验证方法
Oct 21 Javascript
JS基于for语句编写的九九乘法表示例
Jan 04 Javascript
新版小程序登录授权的方法
Dec 12 Javascript
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利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
PHP 缓存实现代码及详细注释
2010/05/16 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
php文件下载处理方法分析
2015/04/22 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
最常用的12种设计模式小结
2011/08/09 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
Python argparse模块使用方法解析
2020/02/20 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
惠普香港官方商店:HP香港
2019/04/30 全球购物
法国体育用品商店:GO Sport
2019/10/23 全球购物
泰国在线书店:SE-ED
2020/06/21 全球购物
金融管理专业毕业生求职信
2014/03/12 职场文书
学习退步检讨书
2014/09/28 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
使用canvas对video视频某一刻截图功能
2021/09/25 HTML / CSS
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技