设置innerHTML会吃掉内部表单元素。从什么时候开始以及通过什么浏览器?

问题描述 投票:0回答:1

如果下面的代码按照我的预期运行,按下按钮会将 FORM 的内部 P 元素替换为另一个 FORM,并且会出现嵌套边框:

<form id="aa1" style="border: solid 2px blue; padding: 4px;">
    <p>Original content</p>
</form>

<button type="button"
 onclick="document.getElementById('aa1').innerHTML = '<form id=\'aa2\' style=\'border: solid 8px red; padding: 4px;\'><p>New content</p></form>';">
 Click me
</button>

在 Chrome 119 和 Edge 118(在 Windows 上)中,情况并非如此:内部表单被剥离,原始段落被内部表单的内容替换。

我知道,HTML 中不允许嵌套表单。

我的问题是:所有浏览器的行为都是这样吗?这种行为是否在某处描述过?从什么版本的浏览器开始有这样的行为?

在 Fiddle 上尝试一下: https://jsfiddle.net/rnk9vms5/3/

html google-chrome browser microsoft-edge chromium
1个回答
0
投票

我知道,HTML 中不允许嵌套表单。

那么为什么要尝试创建一些无效的 HTML 内容呢?

现代浏览器非常宽松,接受无效的 HTML,无论如何都会尝试呈现它并假设程序员可能想要什么。这并不意味着您应该依赖此类行为或故意编写无效的 HTML。

例如,网页包含以下无效 HTML 代码:

<p>Hello

将被大多数现代浏览器转换为:

<html>
    <head></head>
    <body>
        <p>Hello</p>
    </body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.