jQuery & 参数元素

Posted

技术标签:

【中文标题】jQuery & 参数元素【英文标题】:jQuery & the param element 【发布时间】:2012-03-07 20:42:41 【问题描述】:

这段代码对吗

$('<param><div></div></param>')

产生这个输出?

[<param>, <div></div>]

而大多数其他标签(例如:部分)

$('<section><div></div></section>')

生产

[<section>...</section>]

换句话说,jquery 似乎删除了 param 元素中的元素并将它们放在旁边。我知道您通常不会将 dom 元素放在 param 标记中。但是我使用 jquery 来遍历一个 XML 文档,并且遇到了这个问题。

解决方法是什么?

【问题讨论】:

jQuery 期望 html 而不是 xml,在 html 中 param 是一个自闭合标签,不能有子元素,所以 jQuery 会为您解决这个问题。解决方法是使用 XML 解析器.. I.E jQuery.parseXML 我不认为 jQuery 修复了任何东西,它是使用 innerHTML(jquery 使用它)。 document.getElementById('mydiv').innerHTML = '&lt;param&gt;&lt;div&gt;&lt;/div&gt;&lt;/param&gt;' 效果一样。 【参考方案1】:

正如我在评论中所说,jQuery 需要 HTML 而不是 XML,在 HTML 中 param 是一个自闭合标签,不能有子节点,所以 jQuery 会为你解决这个问题。

你可以试试:

$( $.parseXML( '<param><div></div></param>' ) ).children()

这给出了:

[<param>...</param>]

【讨论】:

【参考方案2】:

您应该开始创建一个有效的 XML 文档:

var xml ='<param><div></div></param>';
var xmlDoc = $.parseXML( xml );

然后你就可以处理这个文档了:

var $xml = $( xmlDoc );

【讨论】:

【参考方案3】:

标签PARAM是一个自动关闭标签,里面不能包含其他元素。µ

在应用&lt;param&gt;&lt;div&gt;&lt;/div&gt;&lt;/param&gt; 时,它被固定为&lt;param&gt;&lt;div&gt;&lt;/div&gt;,因此您在jquery 对象中获得了两个元素。

例如&lt;input&gt;&lt;div&gt;&lt;/div&gt;&lt;/input&gt; 也是如此。 INPUT 是自动关闭的,这会导致 &lt;input&gt;&lt;div&gt;&lt;/div&gt;

我不认为 jQuery 修复了它,这仅仅是因为 jQuery 使用了innerHTML

document.getElementById('mydiv').innerHTML = '<param><div></div></param>';
// you'll get two child elements <param> + <div>

【讨论】:

以上是关于jQuery & 参数元素的主要内容,如果未能解决你的问题,请参考以下文章

jQuery的DOM操作实例——选项卡&&Tab切换

jquery动画回调 - 如何将参数传递给回调

jQuery 创建包含子元素的元素

jQuery判断当前元素是第几个元素&获取第N个元素

使用jquery在顶部元素之前添加一个新元素[重复]

jQuery 如何处理评论元素?