3

有没有办法拥有非标准属性,如

onselectstart
oncontextmenu 
...

在标签中,并且仍然以某种方式通过验证作为 HTML 4.01 过渡?

除了稍后使用 Javascript 添加属性。

4

5 回答 5

5

使用这些属性将产生无效的文档。

稍后使用 Javascript 添加这些属性将生成无效文档(即使 W3C 验证器无法告诉您)。

但 W3C 从未反对使用专有扩展。验证不应该是一项要求。当您不符合规范时,这是一种告诉您的方法。W3C 不会仅针对无效页面发送 FBI。

如果您依靠专有扩展来为您的访问者提供更好的体验(但不依赖它),那么您就走在了正确的道路上 :-) 只需为那些进入下一个规范的人祈祷(或贡献)。


现在,如果它是关于阻止浏览器上下文菜单或选择,那就太粗鲁了!不要这样做!

于 2009-11-23T20:34:03.173 回答
5

虽然您不能在 HTML 4.01 中添加自己的标签或属性,但一种常见的技术是使用标准的 HTML 标签或属性来包含您的信息,即使根据规范它的用法并不完全正确。例如,“类”属性可以存储几乎任何类型的数据:

<a href="#" id="user-link-1" class="username:matt email:matt@example.com">Matt</a>

您可以检索上面链接的类并将“类”属性拆分以检索您的数据。

我见过的其他一些用于自定义数据的标签和属性:<script>具有非 JavaScript 'type' 值的标签、隐藏的输入值、各种标签上的 'title' 属性。

如果您不介意从 HTML 4 更改,您还有其他几个选择:

您还可以在运行时通过 JavaScript 向 HTML 文档添加自定义属性。例如:

var body = document.getElementsByTagName("body")[0];
body["my-attribute"] = "Hello, world!";
alert(body["my-attribute"]);

如果您的信息是动态的并且根本不需要存储在标记中,这会很有帮助。

于 2009-11-23T20:41:05.173 回答
2

不,您必须更改文档类型。

<!DOCTYPE HTML>

该文档类型将允许您使用自己的属性。这是一篇关于这个问题的好文章

于 2009-11-23T20:22:38.533 回答
2

不,不是。在仍然符合该语言的同时,没有向该语言添加内容的余地。

于 2009-11-23T20:25:47.760 回答
0

我过去做过的一件事就是使用“数据”,这通常用于幻灯片等。但是写出你需要的数据,就像你在“样式”属性中一样。

<div class="your_element" data="onselectstart:foo;oncontextmenu:bar;">
</div>

然后使用jquery抓取数据:

var onSelectStart = getData($(".your_element"), "onselectstart");

功能:

// 
function getData(elementObject, indexString)
{
    var dataElements = elementObject.attr("data").trim().split(";");
    var result = dataElements.some(function(entry) {
        dataArray = entry.trim().split(":");
        if(dataArray[0] == indexString)
        {
            found = dataArray[1].trim();
            return true; // return from "some"
        }
    });
    return result ? found : false;
}

正如其他几个人提到的那样,无效并不是世界末日。就像我说的,“数据”是常用的,甚至在某些 IDE 中突出显示为有效。

于 2014-07-10T07:12:29.600 回答