在 jQuery 1.8 中的自定义过滤器选择器中获取“匹配”对象

2024-03-11

作为参考,这里有一篇文章使用 jQuery 创建自定义过滤器选择器 http://answers.oreilly.com/topic/1055-creating-a-custom-filter-selector-with-jquery/.


介绍:

对于那些不熟悉的人jQuery 的自定义过滤器选择器,这里是它们的简要介绍:

如果您需要可重复使用的filter http://api.jquery.com/filter/,你可以通过添加你自己的函数来扩展 jQuery 的选择器表达式jQuery.expr[':'] object.

该函数将在当前集合中的每个元素上运行,并应返回 true 或 false(很像filter http://api.jquery.com/filter/)。三位信息传递给该函数:

  1. 有问题的元素

  2. 该元素在整个集合中的索引

  3. A match从正则表达式匹配返回的数组,其中包含更复杂表达式的重要信息。

一旦你延长了jQuery.expr[':'],您可以将它用作 jQuery 选择器中的过滤器,就像使用任何内置过滤器一样(:first, :last, :eq() etc.)


下面是一个示例,我们将过滤分配有多个类的元素:

jQuery.expr[':'].hasMultipleClasses = function(elem, index, match) {
    return elem.className.split(' ').length > 1;
};

$('div:hasMultipleClasses');

这是小提琴:http://jsfiddle.net/acTeJ/ http://jsfiddle.net/acTeJ/


在上面的例子中,我们没有使用match数组被传递给我们的函数。让我们尝试一个更复杂的例子。在这里,我们将创建一个过滤器来匹配具有更高值的元素tabindex比指定的数量:

jQuery.expr[':'].tabindexAbove = function(elem, index, match) {
    return +elem.getAttribute('tabindex') > match[3];
};

$('input:tabindexAbove(4)');

这是小提琴:http://jsfiddle.net/YCsCm/ http://jsfiddle.net/YCsCm/

这样做的原因是因为matcharray 是从用于解析选择器的正则表达式返回的实际数组。所以在我们的例子中,match将是以下数组 http://jsfiddle.net/YCsCm/1/:

[":tabIndexAbove(4)", "tabIndexAbove", "", "4"]

正如你所看到的,我们可以通过使用来获取括号内的值match[3].


问题:

在 jQuery 1.8 中,the match数组不再被传递给过滤函数 http://jsfiddle.net/YCsCm/2/。由于我们无法访问传入的信息,the tabindexAbove过滤器不再起作用 http://jsfiddle.net/YCsCm/3/(这个小提琴和上面那个小提琴之间的唯一区别是它使用了更高版本的 jQuery)。

因此,我想澄清以下几点:

  1. 这是预期的行为吗?它在任何地方都有记录吗?

  2. 这与以下事实有什么关系吗Sizzle已经升级 http://blog.jquery.com/2012/07/04/the-new-sizzle/(尽管它明确指出“Sizzle 的旧 API 在这次重写中没有改变”。也许这就是他们所说的“删除现在不必要的Sizzle.filter")?

  3. 现在我们无法访问match数组,是否有其他方法可以获取传递给过滤器的信息(在我们的例子中,4)?

我从未在 jQuery 文档中找到任何有关自定义过滤器选择器的文档 https://www.google.com/search?q=site%3Adocs.jquery.com+custom+filter+selector,所以我不知道从哪里开始寻找这方面的信息。


jQuery 添加了一个实用程序,用于在 Sizzle 中创建自定义伪值。它有点冗长,但比使用 match[3] 更具可读性。它还具有性能更高的优点,因为您可以避免每次测试元素时重复繁琐的计算。已经被接受的答案是一个很好的答案,但让我添加一个注释,说你可以使用 $.expr.createPseudo 而不是自己设置 sizzleFilter 属性,这会节省一点空间。

jQuery.expr[':'].tabIndexAbove = $.expr.createPseudo(function( tabindex ) {
    return function(elem) {
        return +elem.getAttribute('tabindex') > tabindex;
    }
});

$('input:tabIndexAbove(4)').css('background', 'teal');

jsfiddle:http://jsfiddle.net/timmywil/YCsCm/7/ http://jsfiddle.net/timmywil/YCsCm/7/

这一切都记录在 Sizzle 的 github 上:https://github.com/jquery/sizzle/wiki/Sizzle-Documentation https://github.com/jquery/sizzle/wiki/Sizzle-Documentation

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 jQuery 1.8 中的自定义过滤器选择器中获取“匹配”对象 的相关文章

随机推荐

  • Arduino从SD卡读取最后一行

    我对 Arduino 业务还很陌生 如何从 SD 卡读取最后一行 通过以下代码片段 我可以读取第一行 n 之前的所有字符 现在我想添加一个 向后 声明 或其他内容 到目前为止我的代码 include
  • 寻找 Wii 兼容的 Javascript Flash mp3 播放器

    我正在寻找一款能够在 Wii 上基于 Opera 的浏览器中运行的 flash mp3 播放器 播放器需要启用 javascript 支持播放 停止等方法 mp3 曲目列表将使用与播放器相同的页面上的 ajax 动态构建 因此当曲目完成播放
  • Android:在 Android 设备选择器中,同一设备会出现多次

    我正在使用 Eclipse 为 Android 操作系统编程 我使用真实设备来测试我的应用程序 为了测试我的应用程序 我单击 运行 然后单击我想要运行的目标项目 然后弹出 Android 设备选择器 我可以在其中选择要运行该应用程序的设备或
  • 脚本标签中的文本属性 - 澄清?

    在阅读 Angular 的指令代码时 我看到this https github com angular angular js blob master src ng directive script js L43 var scriptDire
  • SVG 在视网膜屏幕上作为边框图像

    请考虑我们有简单的 SVG 文件 其中包含圆角半径等于 10 的圆角矩形的代码
  • Delphi通用约束问题

    我正在尝试创建一个与 tiOPF delphi www tiopf com 的对象持久框架 一起使用的通用列表类 具体来说 我试图采用现有的泛型类 TtiObjectList 并制作一个使用 TtiObject 后代的泛型版本 我更改基类的
  • prolog中输入/输出参数的区别

    Prolog谓词定义中的输入和输出参数有什么区别吗 这与其他语言 例如Scheme 和C 相比如何 我希望我理解你的问题 您应该研究一下 Prolog 中如何实现统一 因为它会让事情变得更清晰 反正 简而言之 没有内置方法可以将 Prolo
  • 为什么我不能在类上下文中引用 DATA?

    在 Ruby 中 存储静态文本真的很方便 END 通过任意使用DATAIO对象 puts DATA read Prints This is the stuff END This is the stuff 然而 当我尝试从新类的上下文中引用
  • JavaScript 可以捕获语法错误吗?

    MDN 状态 https developer mozilla org en US docs Web JavaScript Reference Global Objects SyntaxError 当 JavaScript 引擎在解析代码时遇
  • 如何在父级中绑定子用户控件数据上下文

  • 在 R 的 JAGS 或 BUGS 中指定离散威布尔分布

    我使用 R 中的 JAGS 将威布尔模型拟合到离散值 将威布尔模型拟合到连续数据没有问题 但当我切换到离散值时 我遇到了麻烦 以下是在 JAGS 中拟合威布尔模型的一些数据和代码 draw data from a weibull distr
  • C++ 变量声明语法

    我最近遇到了这个结构 整数 米 这似乎相当于 整数米 奇怪的是 我以前从未见过这个特殊的成语 有人可以给我指出一个参考资料 我可以在其中阅读相关规范 或者直接解释一下吗 这也适用于直 C 吗 谢谢 困惑的开发者 这不是一个 习语 它只是一对
  • 使用数据注释进行模型验证的错误消息

    给定以下课程 using System ComponentModel DataAnnotations public class Book public Contact PrimaryContact get set public Contac
  • React JS 不支持 Html“align”属性

    我是 ReactJS 的新手 在反应组件中 我已经 var SaveOrganization React createClass render function return div align center a href addVenue
  • Nuxt 3 - 如何每n分钟刷新一次获取的数据

    因此 在我的数据库中 数据每分钟都会刷新 数据实际上更新 我检查过 然后我在页面上显示这些数据 当我在页面之间切换以及手动刷新页面时 数据会被获取 但如果我坐在一个页面上例如 5 分钟 即使数据库中的数据更新 数据也不会在页面端刷新 是否可
  • IE8 CSS 和 html 与 IE7 对比

    请原谅这里的任何鲁莽 我正无能为力地寻找答案 我正在寻找从 IE7 更改为 IE8 的特定 html 和 css 标签的列表 如果存在 或一些资源指南 具体来说 我想看到类似 此代码在 IE7 中有效 但在 IE8 中无效 这是损坏的标签相
  • Javascript document.getSelection

    我正在尝试使用 document getSelection 来选择我在所见即所得编辑器的文本区域中输入的文本 但只有当您选择文本区域之外的文本时 它才有效 不知道有没有办法让它选择文本区域内的文本 下面是所见即所得文本编辑器的文本区域 您需
  • 从按分钟计算的原始数据中按小时聚合 MySQL 数据

    我有一个表 table 1 其中包含每分钟的数据 如下所示 date time value 2015 06 05 18 00 00 222 663 2015 06 05 18 01 00 222 749 2015 06 05 18 02 0
  • Mac系统上检测框架使用情况?

    我想在 OSX 上开发示例框架 并要求在任何时候该框架只能由单个客户端使用 我不知道如何实现这一点 他们有 API 来检测框架正在使用的天气吗 我们可以为此使用一些与文件相关的 API 吗 我看过一个 Windows 示例 其中使用以下命令
  • 在 jQuery 1.8 中的自定义过滤器选择器中获取“匹配”对象

    作为参考 这里有一篇文章使用 jQuery 创建自定义过滤器选择器 http answers oreilly com topic 1055 creating a custom filter selector with jquery 介绍 对