使用 .filter() 进行高级筛选
探索 .filter() 方法的完整能力,使用函数应用自定义逻辑,并根据动态属性或关系选择元素。
使用 .filter() 进行高级筛选 是 CoddyKit 上的免费 jQuery Academy 课时。 这是第 2 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 jQuery Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 jQuery Academy 课程共包含 3 节课。
使用 .filter() 优化选择
jQuery 中的 .filter() 方法是缩小现有已选元素集合的强大工具。它可以帮助您只保留符合特定条件的元素。
您可以把它看作第二层选择:在初次选择之后应用它,以获得更高的精确度。
使用选择器进行基本筛选
使用 .filter() 最简单的方式是提供一个 CSS 选择器字符串。它的工作方式与普通选择器相同,但只会应用于当前 jQuery 集合中已经存在的元素。
让我们先选择所有带有 .item 类的 div 元素,然后筛选出同时带有 .active 类的元素。
<!DOCTYPE html>
<html>
<head>
<title>Filter by Selector</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<div class="item">Item 1</div>
<div class="item active">Item 2</div>
<div class="item">Item 3</div>
<div class="item active">Item 4</div>
<script>
$(document).ready(function(){
// Select all divs with class 'item'
var allItems = $('div.item');
// Then filter to keep only those with class 'active'
var activeItems = allItems.filter('.active');
activeItems.css('color', 'blue');
});
</script>
</body>
</html>使用函数实现自定义逻辑
传入一个函数作为参数时,.filter() 才能真正发挥作用。这样,您就可以对选择结果中的每个元素应用高度自定义的动态逻辑。
- 该函数会针对当前 jQuery 集合中的每个元素运行。
- 它接收两个参数:
index(元素在集合中的位置)和element(原始 DOM 元素)。 - 返回
true可保留元素,返回false则将其从筛选后的集合中移除。
按索引位置筛选
您可以在筛选函数中使用 index 参数,根据元素在当前 jQuery 集合中的位置来选择元素。这对于选择每隔一个元素或特定范围的元素等任务非常有用。
让我们选择每隔一个列表项(索引从 0 开始的偶数项),并突出显示它们。
<!DOCTYPE html>
<html>
<head>
<title>Filter by Index</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<ul>
<li>Item 0</li>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>
<script>
$(document).ready(function(){
$('li').filter(function(index) {
// Keep items at even indices (0, 2, 4...)
return index % 2 === 0;
}).css('background-color', 'lightgreen');
});
</script>
</body>
</html>根据属性和特性筛选
element 参数(或函数内部的 $(this))可以让您检查每个 DOM 元素的特性、属性或文本内容,从而实现高度精确的筛选。
在这里,我们将查找文本中包含“Important”一词的所有列表项,并将它们设为粗体。
<!DOCTYPE html>
<html>
<head>
<title>Filter by Property</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<ul>
<li>Task 1</li>
<li>Important Task 2</li>
<li>Task 3</li>
<li>Another Important Task 4</li>
</ul>
<script>
$(document).ready(function(){
$('li').filter(function() {
// Check if the text content includes "Important"
return $(this).text().includes('Important');
}).css('font-weight', 'bold');
});
</script>
</body>
</html>使用数据进行动态筛选
HTML5 数据属性(例如 data-status="active")非常适合直接在元素中存储额外的、特定于应用的信息。您可以使用 .filter(),根据这些自定义数据值来选择元素。
让我们使用列表项的 data-status 属性,突出显示标记为“complete”的列表项。
<!DOCTYPE html>
<html>
<head>
<title>Filter by Data</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<ul>
<li data-status="pending">Task A</li>
<li data-status="complete">Task B</li>
<li data-status="pending">Task C</li>
<li data-status="complete">Task D</li>
</ul>
<script>
$(document).ready(function(){
$('li').filter(function() {
// Check the 'data-status' attribute
return $(this).data('status') === 'complete';
}).css('text-decoration', 'line-through');
});
</script>
</body>
</html>按子元素或父元素筛选
您的筛选函数还可以检查元素之间的关系。例如,您可能希望选择包含特定子元素的父元素,反之亦然。
在这里,我们将查找其中包含 <img> 标签的列表项,并为它们添加边框。
<!DOCTYPE html>
<html>
<head>
<title>Filter by Relationship</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<ul>
<li>Text only</li>
<li>Item with <img src="https://placehold.co/16x16" alt="icon"></li>
<li>Another text item</li>
<li>Item with another <img src="https://placehold.co/16x16" alt="image"></li>
</ul>
<script>
$(document).ready(function(){
$('li').filter(function() {
// Check if the current <li> contains an <img>
return $(this).find('img').length > 0;
}).css('border', '2px solid orange');
});
</script>
</body>
</html>使用逻辑实现复杂筛选
在筛选函数内部,您可以使用标准 JavaScript 逻辑运算符,例如 &&(AND)和 ||(OR),组合多个条件。
这样,您就可以同时根据多个条件进行非常精确的选择,让筛选功能更加强大:
- 元素是否可见?并且是否具有特定类?
- 是否包含文本“X”?或者是否具有数据属性“Y”?
现实场景中的动态筛选
让我们综合运用所学内容。设想一下,根据多个条件筛选产品列表。您的筛选函数可以动态检查多个条件。
此示例使用筛选函数中的组合逻辑,突出显示同时可见且属于“electronics”类别的产品。
<!DOCTYPE html>
<html>
<head>
<title>Dynamic Filtering</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<style>
.hidden { display: none; }
</style>
</head>
<body>
<div class="product" data-category="electronics">Laptop</div>
<div class="product hidden" data-category="books">Novel</div>
<div class="product" data-category="electronics">Mouse</div>
<div class="product" data-category="books">Textbook</div>
<script>
$(document).ready(function(){
$('div.product').filter(function() {
// Filter products that are visible AND in 'electronics' category
var isVisible = $(this).is(':visible');
var isElectronics = $(this).data('category') === 'electronics';
return isVisible && isElectronics;
}).css('background-color', 'lightblue');
});
</script>
</body>
</html>筛选挑战
给定以下 HTML:<li class="item special" data-value="10">...</li>,哪个 .filter() 函数能够正确地仅选择同时具有 .special 类且 data-value 大于 5 的 <li> 元素?
回顾:动态筛选的强大功能
现在,您已经掌握了 jQuery .filter() 方法的高级用法!
- 它可以优化现有选择,让您进行精确控制。
- 使用函数可以实现动态且复杂的筛选逻辑。
- 您可以检查索引、元素特性、数据属性以及元素之间的关系。
- 使用
&&(AND)和||(OR)组合多个条件,以实现高度具体的筛选标准。
这个强大的方法可以帮助您创建响应迅速、由数据驱动的用户界面。
用 AI 导师学习 JavaScript — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 22
- 课程
- 48
常见问题解答
「使用 .filter() 进行高级筛选」课时是免费的吗?
是的 — 「使用 .filter() 进行高级筛选」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 jQuery Academy 课程的其余内容,请升级到 CoddyKit PRO。 jQuery Academy 课程共包含 3 节课。
「使用 .filter() 进行高级筛选」这节课中我会学到什么?
探索 .filter() 方法的完整能力,使用函数应用自定义逻辑,并根据动态属性或关系选择元素。 你通过在浏览器中直接运行的动手代码来练习 jQuery Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 jQuery Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 jQuery Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 3 节。
「使用 .filter() 进行高级筛选」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 jQuery Academy 课中编写并运行代码吗?
能。每节 jQuery Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 构建自定义伪选择器
- 使用 .filter() 进行高级筛选
- 使用 .not() 排除元素