如果 DOM classList 包含特定类,请检查 Saxon-JS 2.1

Posted

技术标签:

【中文标题】如果 DOM classList 包含特定类,请检查 Saxon-JS 2.1【英文标题】:Check with Saxon-JS 2.1 if a DOM classList contains a specific class 【发布时间】:2021-07-26 04:48:13 【问题描述】:

Saxon-JS 不仅可以在浏览器中运行 XSLT,还可以读写 html 内容。使用 javascript,检查元素类列表中是否包含“已编辑”类可以通过

document.getElementById(id).classList.contains('edited')

但是如何使用 Saxon-JS 2.1 实现这一点?

可能的方法似乎是

ixsl:get($node, 'class') 但我不知道如何通过 id 指定节点(这将返回整个类列表)

ixsl:eval('document.getElementById($id).classList.contains('edited')') 但我认为不支持使用 $id 并且“已编辑”使用撇号,这些撇号已用于包含 eval 参数和整个 xpath 语句(此处不包括)。所以不能同时使用单撇号和双撇号。

ixsl:eval(document.getElementById('+$id+').classList.contains('+$class+')') 在这里我收到一条错误消息,指出“没有为 xs:string 类型的参数定义算术运算符”。

ixsl:eval(concat('document.getElementById(',$id,').classList.contains(',$class,')')) 但即使这样也行不通。它被编译成 sef,但在运行时出现“无法读取 null 属性”错误。

我知道我可以在 HTML 页面中编写一个 JavaScript 函数并调用它自己的函数,但我想在 XSLT 脚本中完成它。

【问题讨论】:

【参考方案1】:

如果您想返回任何符合该条件的 XML 元素,您可以只使用标准的 XPath 表达式:

//*[@id eq $id][contains-token(@class, 'edited')]

见:fn:contains-token

【讨论】:

我认为实时 HTML 页面的内容只能通过提供的 ixsl 函数访问,并且不知道也可以使用 Xpath。这就是为什么我没有使用您编辑的 XSLT 和 XSLT-3.0 标签的原因,我认为它们会误导。谢谢你让我走上正轨。您的表达式仍然没有全部捕捉到,因为我想在不存在上下文节点的函数中使用它。我最终得到了 ixsl:page()//*[@id eq $id][contains-token(@class, 'edited')] @Andreas,ixsl:page()/id($id)[contains-token(@class, 'edited')] 也可以吗? saxonica.com/saxon-js/documentation/index.html#!conformance/… 说:“fn:id() 和 element-with-id():这些函数选择那些由 DOM 方法 getElementById() 返回的元素”。 @Martin Honnen:我发现还有很多东西要发现。谢谢!

以上是关于如果 DOM classList 包含特定类,请检查 Saxon-JS 2.1的主要内容,如果未能解决你的问题,请参考以下文章

使用HTML5里的classList操作CSS类

创建和删除DOM元素

classList

自己实现dom的classList功能

排他思想

Jquery&classList