【问题标题】:Preventing jQuery from changing self-closing tags with custom XML防止 jQuery 使用自定义 XML 更改自闭合标签
【发布时间】:2011-11-09 07:00:09
【问题描述】:

我正在创建一个浏览器插件(书签),该插件会要求嵌入在页面的<textarea> 元素中的大型 XML 文档。这是一种自定义 XML 语言,包含一些自闭合标签(例如,<custom-tag />)。我能够捕获 XML 文档,将其包装在 jQuery 对象变量中(例如,$(myXml)),并轻松地操作数据。但是,在我尝试将操作后的 XML 文档插入页面的 <textarea> 元素后,所有自关闭标记都更改为单独的开始和结束标记。这是正在发生的事情的一个示例:

之前:

<outer-tag>
    <SELF-CLOSING-TAG foo="bar" />
    <second-tag>
        <third-tag>Some Value</third-tag>
    </second-tag>
</outer-tag>

jquery 操作后:

<outer-tag>
    <SELF-CLOSING-TAG foo="bar">
        <second-tag>
            <third-tag>Some Value</third-tag>
        </second-tag>
    </SELF-CLOSING-TAG>
</outer-tag>

有什么办法可以阻止 jQuery(或者它只是 JavaScript 还是浏览器?)将这些自关闭标签变成打开和关闭标签?后一种方式对我们使用的 XML 模式无效。如果没有办法解决这个问题,还有其他值得考虑的黑客吗?

更新: Drejc 的想法为我指明了解决这个问题的正确方向。在他的意见之后,我得到了关于这个额外的S.O. post 的额外建议,这共同解决了这个问题。

【问题讨论】:

    标签: javascript jquery html xml


    【解决方案1】:

    您是否检查过这种情况何时发生。插入新元素后或读出后。您可以尝试不使用自闭合元素,如下所示:

    <outer-tag>
        <SELF-CLOSING-TAG foo="bar"></<SELF-CLOSING-TAG>
        <second-tag>
            <third-tag>Some Value</third-tag>
        </second-tag>
    </outer-tag>
    

    这可能会有所帮助。

    【讨论】:

    • 无论我自己是否真的对 XML 进行了任何更改,都会发生这种情况。当我通过 jQuery 提取 XML 然后再次使用 jQuery 将(相同的)XML 放回页面时,这会自动发生。这是我公司使用的自定义 XML 语言,我无法使用自闭合标签。感谢您的想法。
    • Drejc,经过进一步考虑,您将结束标签紧跟在开始标签(对于自结束标签)之后的想法可能可行并且是有效的 XML。但是,我看不到如何轻松地自动化这项工作。有大约 30 种不同类型的自闭合标签,XML 文档长达 3,000 多行。有什么想法吗?
    • 我对 jQuery 与 XML 的结合并不完全熟悉,但在一侧或另一侧可能有一些选项可以强制将自闭合元素呈现为空元素。我知道 C# 可以做到这一点。但这听起来像是 jQuery 中的一个错误,请尝试与 jQuery 团队联系。
    【解决方案2】:

    这“感觉就像”XSD 定义的结果,需要您的自闭合标签环绕“第二标签”。看看吧。我还怀疑如果您尝试使用其他浏览器,这可能不会发生。

    【讨论】:

    • 我在不同的浏览器中试过这个,结果是一样的。我不确定浏览器将引用哪个 XSD。有什么方法可以强制 jQuery(或浏览器)引用特定的 XSD?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    相关资源
    最近更新 更多