的W3C验证不喜欢自闭合标签(那些与"端/>")上非空元素.(Void元素是那些可能不包含任何内容的元素.)它们在HTML5中仍然有效吗?
可接受的 void元素的一些示例:
<br />
<img src="" />
<input type="text" name="username" />
Run Code Online (Sandbox Code Playgroud)
被拒绝的非虚元素的一些例子:
<div id="myDiv" />
<span id="mySpan" />
<textarea id="someTextMessage" />
Run Code Online (Sandbox Code Playgroud)
注意: W3C验证器实际上接受无效的自动关闭标签:由于简单的拼写错误(\>而不是/>),作者最初遇到了问题.但是,自动关闭标签在HTML5中通常不是100%有效,并且答案详细说明了各种HTML风格的自闭标签问题.
如果HTML元素可以包含一些文本,我是否可以测试(使用纯javascript或jQuery)干净而强大的方式?
例如,<br>,<hr>或<tr>不能包含文本节点,同时<div>,<td>还是<span>可以的.
测试此属性的最简单方法是控制标记名称.但这是最好的解决方案吗?我认为这是最糟糕的......
编辑:为了澄清问题的意义,需要指出完美的答案应该考虑两个问题:
显然,前一个列表的每个点都有一个子答案.
HTML应该包含自闭标签(它似乎不再存在),兄弟姐妹不应该神奇地成为子DOM元素(innerHTML).
感谢@PSL,@ shaunhusain和@zeroflagL让我直截了当.
我相信我可能在Angular的自定义指令处理中发现了一个错误,并希望确认我没有误解自定义指令行为.我是AngularJS的新手,所以也许我犯了一个错误.
看起来当Angular处理void元素上的自定义指令时,会发生不正确的DOM更改,并将对等元素推送到内部HTML.这是一些HTML:
<div ng-app="myApp">
<div ng-app="mainController">
<div>
<voidtagtest></voidtagtest>
<p>Example 1 - stays peer</p>
</div>
<div>
<voidtagtest/>
<p>Example 2 - becomes innerHTML</p>
<p>this one, too.</p>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这是Angular的一些JavaScript:
angular.module('myApp', [])
.controller('mainController', function ($scope) {
$scope.message = 'a msg';
})
.directive('voidtagtest', function () {
return {
restrict: 'E'
};
});
Run Code Online (Sandbox Code Playgroud)
Angular处理后的DOM(需要浏览器Web检查)是:
...
<div>
<voidtagtest>
<p>Example 2 - becomes innerHTML</p>
<p>this one, too.</p>
</voidtagtest>
</div>
...
Run Code Online (Sandbox Code Playgroud)
注意两个Paragraph标签是如何被拉入voidtagtest元素的?
W3C定义 …
简单的问题。一个基本的水平尺,没有花哨,没有颜色,没有大小或宽度,没有对齐,是... <hr></hr>还是<hr/>。
我了解其中的哪个有效,但哪个正确。