【问题标题】:Check with Saxon-JS 2.1 if a DOM classList contains a specific class如果 DOM classList 包含特定类,请检查 Saxon-JS 2.1
【发布时间】: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 脚本中完成它。

【问题讨论】:

    标签: xslt xslt-3.0 saxon-js


    【解决方案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:我发现还有很多东西要发现。谢谢!
    猜你喜欢
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 2020-02-25
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多