表达式过滤,指的是使用“自定义表达式”的方式来选取符合条件的元素。这种自定义表达式可以是选择器,也可以是函数。

在jQuery中,表达式过滤共有两个方法:一个是filter();另外一个是has()。

一、filter()

在jQuery中,filter()是功能最强大的过滤方法,它可以使用选择器过滤,也可以使用函数过滤。

1.选择器过滤

选择器过滤,指的是使用选择器来选取符合条件的元素。

语法:

$().filter(selector)

说明:

参数selector是一个选择器。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("li").filter(".select").css("color", "red"); }) </script> </head> <body> <ul> <li>HTML</li> <li>CSS</li> <li>JavaScript</li> <li class="select">jQuery</li> <li>Vue.js</li> </ul> </body> </html>

浏览器预览效果如下图所示。

2、函数过滤

函数过滤,指的是根据函数的返回值来选取符合条件的元素。

语法:

$().filter(fn)

说明:

参数fn是一个回调函数。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("li").filter(function(){ return $(this).text() == "jQuery"; }).css("color", "red"); }) </script> </head> <body> <ul> <li>HTML</li> <li>CSS</li> <li>JavaScript</li> <li>jQuery</li> <li>Vue.js</li> </ul> </body> </html>

浏览器预览效果如下图所示。

分析:

$("li").filter(function(){return $(this).text() == "jQuery";})

上面这句代码表示选取内部文本为“jQuery”的li元素。

filter()非常强大,几乎把之前学过的过滤方法的功能都包含进去了。不过正是由于filter()内部封装的东西过多,导致运行速度非常慢。因此在实际开发中,建议大家优先考虑其他过滤方法,实在迫不得已再用filter()方法。

二、has()方法

在jQuery中,表达式过滤除了可以使用filter()访问外,我们还可以使用has()方法。has()方法虽然没有filter()方法那么强大,但是它的运行速度比较快。

语法:

$().has(selector)

说明:

参数selector是一个选择器。

has()方法与filter()方法功能相似,不过has()方法只有选择器过滤,没有函数过滤。因此我们可以把has()方法看成是filter()方法的精简版。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("li").has("span").css("color", "red"); }) </script> </head> <body> <ul> <li>HTML</li> <li>CSS</li> <li><span>JavaScript</span></li> <li><span>jQuery</span></li> <li>Vue.js</li> </ul> </body> </html>

浏览器预览效果如下图所示。

分析:

$("li").has("span")

上面这句代码表示选取内部含有span标签的li元素。此外,has()方法类似于:has()选择器。