我正在浏览一个网站,发现这行代码:
<div class="section slideshow" id="/featured/">
我以前从未在 id 标签中看到过斜线,这是糟糕的编码,是数据库写出的问题,还是其他什么?
属性中的斜线id
不是有效字符:
ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 ("_") , 冒号 (":") 和句点 (".")。
也许直接在 url 和/或 javascript 中使用它......
也许他使用这种方法 插入数据库(在字符串中插入 id)或转到 url。
Slashe 在html 4.01中不是 ID 的有效字符,但在html5中有效。
对于 html 4.01
ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 ("_") , 冒号 (":") 和句点 (".")。
http://www.w3.org/TR/html5/global-attributes.html#the-id-attribute
这样的过程有很多原因,即使事实证明这并不常见,开发人员也可以选择指定这个类和 id 名称:
也许他用这种方法来区分相同的Id名称不带斜线,
也许他使用这种方法将这个 id 插入到一个字符串中
也许只是一个 CMS 或框架的命名法......
同样的解决方案是联系网站创建者提出这个问题......
但是,如果您想了解更多详细信息,请访问W3C 命名命名法网站...
我给网站发了电子邮件,所有者回复了。
该站点是 HTML4/ASPX 并在被 Javascript 调用时使用该斜杠变量来显示幻灯片。
他似乎并不关心它是否有效,但它在所有浏览器中都可以正常工作。
检查下面的程序,id只是引用那个特定的标签,它不一定是特定的格式,
<html>
<head>
<script type="text/javascript">
function displayResult()
{
document.getElementById("/myHeader/").innerHTML="Have a nice day!";
}
</script>
</head>
<body>
<h1 id="/myHeader/">Hello World!</h1>
<button onclick="displayResult()">Change text</button>
</body>
</html>
上面的程序会让你更好的理解
HTML5 几乎允许 id 属性的任何值 - 明智地使用
HTML 4.01 对 id 属性允许的值非常严格:ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后面可以跟任意数量的字母、数字 ([0-9]) 、连字符 (“-”)、下划线 (“_”)、冒号 (“:”) 和句点 (“.”)。
元素的属性在元素的开始标记内表示。属性具有名称和值。
同一个开始标记上决不能有两个或多个属性的名称彼此不区分大小写匹配。
以下列表描述了 HTML 语法中文档中属性的语法规则。XML 语法中文档中属性的语法规则。在 XML 规范 [XML] 中定义。
属性名称必须包含除空格字符、U+0000 NULL、"""、"'"、">"、"/"、"="、控制字符以及任何非空格字符以外的一个或多个字符由 Unicode 定义。与 XML 兼容的属性名称是那些与 XML 规范 [XML] 中定义的名称产生匹配且不包含“:”字符且其前三个字符不是不区分大小写匹配字符串“xml”的属性名称”。属性值可以包含文本和字符引用,附加限制取决于它们是不带引号的属性值、单引号的属性值还是双引号的属性值。此外,本参考的 HTML 元素部分描述了对特定属性的允许值,并且属性必须具有符合这些限制的值。
有关更多信息,请参阅http://dev.w3.org/html5/markup/syntax.html#syntax-attributes