2017-08-01 30 views
0
  1. <textarea>不是自闭元素,对不对?如果是这样,当我在w3school code example中删除</textarea>时,它为什么仍然有效?为什么一些非自闭HTML元素没有关闭标签(自关闭)将不会显示这些元素,但有一些确实如此

  2. 根据this explanation只有12个自动关闭元素?它是否完整?这是否意味着我们必须添加闭合标签,除了这12个自闭元素?如果不是,那么元素无法正确显示?

+1

[这就是你所说的“*工作*”?](https://jsfiddle.net/umrkznrk/)HTML5是非常友好的,几乎不会破坏无效的语法,并从任何类型构建有效的东西。 .. – Kaiido

+0

当我删除在这里https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_textarea,然后在UI中,我们仍然可以看到textarea元素工作正常。这就是我的意思。 – EntryLeveDeveloper

+1

使textarea变大,你会在那里看到''。 – Kaiido

回答

1

自闭标签伴随着void elements,它们不允许任何内容。

空隙元件是<area><base><br><col><embed><hr><img><input><keygen><link><menuitem><meta><param><source><track><wbr>

考虑<textarea> Text </textarea>。那是而不是自动关闭,因为它包含内容是有意义的;用户输入的文本。

相反,考虑<br />。那是自动关闭,因为这是一个换行符;在新行的开始和结束之间永远不会有任何东西。

无效元素有一个暗示结束标记,如果省略;写标签时可以放心。 <br><br />一样有效。

省略一个 -void元素的结束标记仍然会在某些情况下工作。事实上,有一个列表optional start and end tags,涵盖的东西,如</body></head>。这是因为你不能有一个有效的HTML文件,省略了这些标签,如果你选择自己省略它们,解析器将自动试图将它们放入你的位置。使用F12 Debugger检查将显示,如果省略,这些结束标记将自动创建。

很明显,这可能是解析器混淆,这是很多安全为你自​​己添加标签。否则,您可能会以无效的标记结束。您可以使用W3 Markup Validation服务测试您的标记是否有效。

希望这会有所帮助! :)

+0

添加到,为什么它仍然有效? – EntryLeveDeveloper

+0

省略“”会导致无效标记。当你尝试这样做时,解析器会自动**尝试为你“纠正”这个。如果使用F12调试器检查元素,即使您自己没有创建它,也会发现该元素确实已经被赋予了结束标记:) –

+0

“省略将导致无效标记”尽管我们有无效标记,但解析正确。那么,如果我们缺少一个非自闭元素的关闭标签,我们将不会有任何问题/错误? – EntryLeveDeveloper

1

当您省略</textarea>结束标记时它不“工作”。取而代之的是@Kaiido在上面提到,“</body>\n</html>”被作为文本添加到textarea元素的内容中。看:

screenshot showing textarea eating markup

正如你可以看到有“</body>\n</html>”已成为textarea内容的一部分。

也就是说,通过删除</textarea>结束标记,您已经将源中剩余的所有HTML标记解析为标记,而不是作为textarea元素的文本内容解析。

虽然这是事实,对于一些元素,解析器会推断出那里结束标记应该和它添加到DOM你,解析器将永远做了textarea元素。

根据this explanation只有12个自动关闭元素?它是否完整?这是否意味着我们必须添加闭合标签,除了这12个自闭元素?如果不是,那么元素无法正确显示?

检查https://html.spec.whatwg.org/multipage/form-elements.html#the-textarea-element,你会看到,对于标签遗漏text/html的节还有为textarea元素,它说:

也不标签可以省略。

在规范中的每个元素都在text/html的类似标签遗漏部分,介绍你是否能永远省略结束标签或为元素开始标记。