[jquery]Re-expose jQuery.find.tokenize

2023-12-07 960 views
3

现在缺少这个[jQuery.find.tokenize方法-由@mgol添加]吗?jQuery 3.7.0。

$.find.tokenize('.test');
Uncaught TypeError: $.find.tokenize is not a function
    at :1:8

我们在pie6k/jquery.initialize中使用它。我们观察 DOM 中是否有与选择器匹配的突变,并且能够标记选择器使我们能够忽略选择器永远不会匹配的某些突变。

回答

2

这是我的遗漏 - 我的目标是保留通过jQuery.findjQuery 3.7.0 公开的所有 Sizzle API,看起来我错过了这一点。

我现在重新检查了所有Sizzle.*API 以及我公开的所有其他 API。

我们将在 中修复它3.7.1

现在,我想知道是否不要在 4.0.0 中保留它。这是当前 jQuery 3.7.0 的selector.js结局:

jQuery.find = find;

// Deprecated
jQuery.expr[ ":" ] = jQuery.expr.pseudos;
jQuery.unique = jQuery.uniqueSort;

// These have always been private, but they used to be documented
// as part of Sizzle so let's maintain them in the 3.x line
// for backwards compatibility purposes.
find.compile = compile;
find.select = select;
find.setDocument = setDocument;

find.escape = jQuery.escapeSelector;
find.getText = jQuery.text;
find.isXML = jQuery.isXMLDoc;
find.selectors = jQuery.expr;
find.support = jQuery.support;
find.uniqueSort = jQuery.uniqueSort;

后一部分将 jQuery API 别名回jQuery.find我肯定不会保留在 4.0 中 - 最后,我们将删除所有其他已弃用的 API,并且从 jQuery 的角度来看,这些 API 都是私有的。不过,我对这个块感到好奇:

find.compile = compile;
find.select = select;
find.setDocument = setDocument;

(连同tokenize目前为止此列表中缺失的内容)。他们目前没有在 上曝光main。随着 5.0 中的选择器引擎重写,它们可能需要进行,但 4.0 还没有走那么远,所以也许我们可以继续将它们暴露给高级用例?我将这部分标记为供团队讨论。

0

Tokenize 很重要,并且会在选择器重写之后继续存在,所以我认为从长远来看,保持公开和记录是可以的。我可以看到它如何仍然有用。至于我们在重写时要保留哪些其他方法,我不知道在我们进行重写之前我是否能够肯定地说。

4

是的,我可以想象很难判断重写后仍然存在什么。但我们现在需要做出的决定是在 4.0 中仍然公开什么。我建议将以下块重新添加到main

find.compile = compile;
find.select = select;
find.setDocument = setDocument;
find.tokenize = tokenize;

哪里。find_ jQuery.find如果其中一些不再有意义,我们可以在 5.0 中删除。

这个列表中唯一的用处对我来说不是那么明显setDocument,但即使main它会触发 IE 中的事件处理程序附件,因此可能会删除它,也可以等待 5.0。

4

我同意所有这些。我们可以慢慢来,等待 5.0 之前删除任何内容。

0

是否会考虑将标记器作为其本身的子包发布?鉴于其对于分析选择器的有用性,用户可能希望直接使用分词器。例如,还有其他包,例如css-selector-tokenizerjQuery tokeniser 可以为其提供可信(且经过广泛测试)的替代方案。

9

发布新包会产生额外的维护成本,而且我们没有很多免费的周期来处理此类事情。更不用说这只是 jQuery 的一小部分,如果我们考虑单独发布它,可能还有许多其他部分需要类似的处理。

社区可以自由地发布基于 jQuery 代码的东西。或者,在 jQuery 4.0 中,您可以执行以下操作:

import tokenize from 'jquery/src/selector/tokenize.js';

因为 tokenizer 已被提取到单独的文件中,并且 jQuery 4.x 源代码将被公开并使用 ES 模块。

7

@bezborodow 另外,请记住 jQuery 标记生成器仅处理 jQuery 需要的内容,例如不支持伪元素,因为它们不能在元素查询中使用,只能在样式表中使用。