0

我有一个包含三个不同输入的表单;两个文本和一个提交。此表单的 html 存储在 javaScript 变量var form中。当用户单击按钮时,将执行以下代码:

$('#content').html(form);

这按预期工作。然后,当用户再次单击该按钮时,它会将#content元素的 html 与var form. 您会期望它返回 true,因为我只是将元素设置为包含表单的内容,但它返回 false。

我发现当我从#content元素中检索 html 时,它与我插入它时略有不同。对于每个输入标签,type属性从开头移动到结尾。那是:

<input type="text"... /> --> <input ...type="text" />

可以理解的是,当我尝试比较它们时,它返回 false。但是,这引出了一个问题,即为什么它没有像在变量中一样插入 html?

4

2 回答 2

2

这可能不是由于 jQuery;这是浏览器。一旦将 text/html 转换为 DOM 节点,将这些节点转换回文本取决于浏览器,而不是由规范定义。

如果要比较<form>标签的内容是否与创建时相同,则无法比较其文本形式。毕竟,一旦被浏览器解析<form class="foo" id="bar"><form id="bar" class="foo">就会产生相同的 DOM 节点。

您应该只比较您希望更改并具有明确定义的状态的属性,例如value输入元素的属性。

于 2012-10-29T07:27:37.250 回答
1

执行时.html(form),浏览器会更改其底层文档对象模型 (DOM)。它不会记录作为参数传递的 HTML。

构成网页的 HTML 也是如此——在它被解释为 DOM 节点之后,除非页面被刷新,否则 HTML 本身在页面的生命周期中不再发挥作用。

返回的字符串 string.html()是完全合成的。

所以不,您不会期望返回的字符串.html()与原始form变量相同。

于 2012-10-29T07:37:59.983 回答