带有转义字符的jQuery查找函数在最新版本中不起作用

jQuery find function with escape characters not working in latest version

提问人:INVALID_FIELD 提问时间:7/11/2019 最后编辑:mplungjanINVALID_FIELD 更新时间:7/12/2019 访问量:388

问:

我在 find 函数中有一个选择器,适用于 jQuery 3.3.1,在此之前在 3.4.0 和 3.4.1 中没有。我正在使用它的xhtml jQuery文档对象,我使用了$.parseXML。我正在使用完整版的jQuery。

我已经查看了jQuery更改日志,没有看到任何应该影响这一点的内容,以及github上的源代码更改。

我已经用 .class 和 #id 测试了发现,它可以工作,但 ID 将是动态的,所以我需要按属性名称搜索。我还需要操作多个跨度,这就是我需要一个 .each(函数) 的原因。目前我们正在冻结对 jQuery 3.3.1 的依赖,因为它按预期工作,但在 3.4.0+ 中它甚至没有进入函数。

工程:

const xmlDoc = $.parseXML(`<?xml version="1.0" encoding="windows-1252" ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns:dd="DynamicDocumentation">
        <head>
        <title></title>
        </head><body><span dd:drop_list_uuid="9999">mydrop1</span></body></html>`);
const $xml = $(xmlDoc).find('body');
$xml.find('span[dd\\:drop_list_uuid]').each(function() { 
  console.log($(this).text())
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

不起作用:

const xmlDoc = $.parseXML(`<?xml version="1.0" encoding="windows-1252" ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns:dd="DynamicDocumentation">
        <head>
        <title></title>
        </head><body><span dd:drop_list_uuid="9999">mydrop1</span></body></html>`);
const $xml = $(xmlDoc).find('body');
$xml.find('span[dd\\:drop_list_uuid]').each(function() { // This is the line that doesn't work
  console.log($(this).text())
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

javascript jquery jquery-selectors xhtml

评论

0赞 epascarello 7/11/2019
在示例中,XML 字符串不在引号中
0赞 INVALID_FIELD 7/11/2019
对不起,我会解决这个问题,在实际项目中并非如此。
0赞 INVALID_FIELD 7/11/2019
对不起,我已经添加了整个标题,我认为最低限度会起作用。现在应该定义命名空间
0赞 mplungjan 7/11/2019
我已经用最小的可重现示例更新了您的问题 - 您也缺少 </html>
0赞 INVALID_FIELD 7/11/2019
谢谢你,我是新手

答:

0赞 INVALID_FIELD 7/12/2019 #1

问题在这里解决了。3.4.0+ 摆脱了嘶嘶声。

https://forum.jquery.com/topic/jquery-find-function-with-escape-characters-not-working-in-latest-version#14737000008103091

“新版本的 jQuery 使用 querySelectoAll 而不会发出嘶嘶声。如此多的嘶嘶声语法不再起作用了。

命名空间属性查询可能是在 sizzle 中实现的。 -杰克西加尔