【问题标题】:Does JQuery.parseHTML() handle <source> element names correctly?JQuery.parseHTML() 是否正确处理 <source> 元素名称?
【发布时间】:2017-05-09 18:43:20
【问题描述】:

我正在尝试使用 JQuery 解析一个简单的 XML 片段,其中包含一个名为 &lt;source&gt; 的元素,使用 $(xml)$.parseHTML(xml)。结果对象被错误地解析为空的&lt;source /&gt; 标记,源标记内容为文本节点兄弟。例如,将var xml 设置为此 XML 片段:

<root>
    <name>Some name</name>
    <source>Some source</source>
</root>

调用console.log($(xml)[0]) 会导致:

<root>
    <name>Some name</name>
    <source />
    "Some source"
</root>

注意空的&lt;/source&gt; 标记和文本作为兄弟。

但是,当元素名称更改为sourced 时,它可以正常工作。或者,如果我使用 $.parseXML(xml),则 DOM 包含正确的 &lt;source&gt;Some source&lt;/source&gt; 内容。

这是JSBin as an example

这是一个 JQuery 错误,还是我在这里做错了什么?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    根据MDN&lt;source&gt; 是一个空的 HTML 元素,例如 &lt;img&gt;&lt;input&gt;。你不能用它来包围文本,也没有&lt;/source&gt;标签(所以这个无效标签被忽略了)。它用于指定包含它的&lt;picture&gt;&lt;audio&gt;&lt;video&gt; 元素的资源位置,如下例所示:

    <video controls>
      <source src="foo.webm" type="video/webm">
      <source src="foo.ogg" type="video/ogg"> 
      <source src="foo.mov" type="video/quicktime">
      I'm sorry; your browser doesn't support HTML5 video.
    </video>
    

    $.parseHTML() 像浏览器一样解析它(实际上,它通常只是使用浏览器自己的 HTML 解析功能)。

    由于您的数据是 XML,而不是 HTML,因此您应该改用 $.parseXML()

    【讨论】:

    • 感谢@Barmar - 现在非常有意义。我将切换到$.parseXML() 获取我们的 XML 内容。
    猜你喜欢
    • 2010-10-09
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多