我在验证HTML 4.01时遇到了一个大问题
<li class="exampleclass">
<noscript>
<a href="http://www.skni.pl/index.html">
</noscript>
<span id="showLoginboxButton" style="cursor: pointer;">Login</span>
<noscript></a></noscript>
</li>
我该如何解决?我收到这样的错误
元素“A”的结束标记未打开
... nboxButton“style =”cursor: 指针;“&GT;登录
Validator找到了上述元素的结束标记,但该元素 目前尚未公开。这通常是由剩余的结束标签引起的 在编辑期间删除的元素,或隐式关闭的元素 element(如果您有一个与正在使用的元素相关的错误 这是不允许的,几乎可以肯定的是这种情况)。在后者 如果您修复原件,此错误将消失 问题
如果您的文档的脚本部分发生此错误,则表示您 应该阅读这个FAQ条目。
答案 0 :(得分:4)
注意您的代码是如何组织的:
<li class="exampleclass">
<noscript>
<a href="http://www.skni.pl/index.html">
</noscript>
<span id="showLoginboxButton" style="cursor: pointer;">Login</span>
<noscript>
</a>
</noscript>
</li>
在关闭<noscript>
之前,您正在关闭<a>
。
您无法在HTML(或XML)中进行标记的交错:每个标记必须按照打开的顺序关闭。如果标记在另一个元素中打开,那么它必须是在外部元素关闭之前关闭。如果不遵守此规则,则会发生验证错误。
为了实现您的目标,您可以采取以下措施:
<li class="exampleclass">
<span id="showLoginboxButton" style="cursor: pointer; display: none">Login</span>
<script type="text/javascript">
document.getElementById('showLoginboxButton').style.display = 'inline';
</script>
<noscript>
<a href="http://www.skni.pl/index.html">Login</a>
</noscript>
</li>
基本上,您隐藏#showLoginboxButton
并仅在启用了JavaScript时显示。
当然,像往常一样,尽量避免使用内联样式和脚本标记。我在那里添加它们仅仅是为了示例目的,你应该最终使用一个CSS类和那些更合适的JavaScript代码。
答案 1 :(得分:0)
@acdcjunior对HTML语法和有效性方面的解释进行了很好的解释。在实践方面,最好的方法是避免noscript
元素(如HTML5草案中所建议)并应用不引人注目的JavaScript原则。在这种情况下,你可以写
<li class="exampleclass">
<a href="http://www.skni.pl/index.html" id="showLoginboxButton">Login</a>
</li>
并在CSS和JavaScript中完成剩下的工作。您的JavaScript会为onclick
元素分配a
处理程序,以便它执行脚本必须执行的操作并最终返回false
或以其他方式中止正常的链接处理(如果需要 - 我真的可以看看你如何在没有服务器端操作的情况下进行有意义的登录。
或者它应该是button
。登录操作确实需要操作按钮而不是链接。