我已经为此在网上搜索了几个小时,但找不到解释或解决方案。所以让我们看看是否有人可以在这里为我提供一个......
我遇到的问题是我有一些“无效”的旧 HTML,我们目前正在通过 JQuery 注入一些其他 div 等来改造网站。但是在更改了 DOM 之后,一些功能不再起作用。
让我给你举个例子。旧的 HTML 类似于:
<table>
<form method="POST">
<tr>
<td><input type="text" value="test" /></td>
</tr>
<tr>
<td><input type="submit" value="SEND!" /></td>
</tr>
</form>
</table>
如您所见,在 a<form>
之外有一个嵌套<tr>
实际上是无效的。但它被浏览器正确解释并且它正在工作。但是,如果我通过 JQuery 操作 DOM,浏览器(在我的情况下为 Firefox)会注意到它是错误的并且按钮不再起作用。检查我的 Firebug 会给出类似的结果:
<table>
<form method="POST"></form>
<tr>
<td>...
所以显然该submit
按钮不再起作用,因为它“自动”关闭了<form>
标签并且submit
不再嵌入。
任何人都可以对这个问题有所了解吗?为什么会发生这种情况,我能做些什么来防止这种情况发生(除了更改原始 HTML)。
非常感谢 !!
编辑:
为了避免只得到“无效标记”的答案,让我向您展示第二个示例。
<input type="text" id="something" value="" />
在 onLoad 上加载的 Javascript 函数:
function setRequired() {
document.getElementById('something').setAttribute('aria-required', 'true');
}
在 onload 之后,我可以在 Firebug 中检查它,它可以按预期工作:
<input type="text" id="something" value="" aria-required="true" />
但是,如果我在那之后添加 DOM 操作,它最终会变成:
<inputaria-required="true" type="text" value="" id="something"></inputaria-required="true">
编辑2:
至于 DOM 修改,我只是将页面的整个主体包裹在<div>
标签结构中。所以类似(简化):
$('body').wrapInner('<div class="container">');
要查看此问题的实际效果,请查看此页面(确保您在 Firefox 中查看它,因为它适用于 IE)。