-1

更新:已编辑问题以添加更多信息。

我的应用程序直接在浏览器中查看 XML 数据——经过一些轻量级的客户端 XSLT 处理之后,我们可以假设这里只是一个瘦 HTML 包装器中的身份转换。

<xsl:output method="xml" indent="no" encoding="utf-8" />

<xsl:template match ="/">
  <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>

    </head>
    <body>

      <xsl:template match="@*|node()">
        <xsl:copy>
           <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>

    </body>
  </html>
</xsl:template>

使用 jQuery 1.8.3,这

$("*[target]").click(function (event) {
    alert("click");
});

将(或应该)选择具有@target 属性的元素。

这在 IE 和 Chrome 中运行良好,但在 Firefox 中,除非我将 XSLT 输出更改为“html”,否则 jQuery 不会选择任何内容,这会弄乱其他东西。

在 Firefox 中,让 jQuery 选择非 HTML、XML 元素的正确方法是什么,或者——这可能以不同的方式说同样的事情——让 jQuery 选择自定义 HTML 元素?

更新:找到问题的根源。选择器不会选择,因为它们在 $(document).ready() 内,并且不会触发在 Firefox 中使用 XSLT (output='xml') 样式的 XML 文档。其他人有同样的问题:http: //forum.jquery.com/topic/document-ready-with-xslt-in-xhtml

我还没有找到参数和代码顺序的组合来触发它。到目前为止,我的解决方法是使用 $(window).load() 而不是 $(document).ready()。

更多更新现在有一个jQuery 错误报告,#13193。http://bugs.jquery.com/ticket/13193

4

1 回答 1

0

将 jQuery 代码包装在

$(window).load(function(){
    // jQuery bindings here
});

代替

$(document).ready(function(){
    // jQuery bindings here
});

这将延迟 jQuery 绑定的可用性,但它们会成功

jQuery 团队已将其视为错误。http://bugs.jquery.com/ticket/13193

$(document).ready修复错误后切换回。

于 2013-01-14T03:34:36.360 回答