JQuery.parseHTML()是否正确处理<source />元素名称?

时间:2017-05-09 18:43:21

标签: javascript jquery

我正在尝试使用JQuery使用<source>$(xml)解析一个名为$.parseHTML(xml)的元素的简单XML片段。使用空<source />标记错误地解析生成的对象,并将源标记内容解析为文本节点兄弟。例如,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>

请注意空</source>标记和文本作为兄弟。

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

这是JSBin as an example

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

1 个答案:

答案 0 :(得分:0)

根据MDN<source>是一个空的HTML元素,如<img><input>。您无法使用它来环绕文本,并且没有</source>标记(因此忽略此无效标记)。它用于指定包含它的<picture><audio><video>元素的资源位置,如下例所示:

<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()