【发布时间】:2016-12-01 20:25:36
【问题描述】:
AddThis 使用的符号似乎扩展了 HTML div 标签中可用的参数。
包含按钮数组的标签可以包含附加参数,例如:
<div addthis:url="someUrl"> </div>
除了为元素定义一些 css 类之外,似乎还允许他们的 JavaScript 代码访问来操作这个元素并读取附加的 addthis: 参数的值。
我想自己实现类似的东西,但对如何在标准 HTML 标记中正确允许附加参数感到困惑。
我还看到 AddThis 代码有时会引发 W3C 验证错误,所以想知道这是否完全合法。
四处搜索我发现了一些关于通过在 JavaScript 中扩展原型来扩展 HTML 标记的讨论,但我所阅读的所有内容似乎都是关于添加新事件等。
这个 addthis:url 符号在我看来更像是“模式”,还是我完全走错了轨道?
我已经在这方面取得了一些进展,至少在功能上,但我现在已经非常严重地破坏了 HTML 验证。
进一步解释我想要实现的目标......
与 AddThis 允许您通过向页面添加简单的 <DIV> 标记并包含一些 JavaScript 来包含他们的共享元素的方式相同,我想通过 <IMG> 标记提供类似的功能。
想要使用此功能的人将包含一个 <IMG> 标记,该标记具有一些额外的名称=值对,这些对超出标准图像标记属性并由我的规范定义。
包含的 JavaScript 然后会读取这些附加属性并对图像标签执行一些操作。
为此,我有以下几点:
<IMG id="first image" class="imageThatCanBeWorkedOn" src="holding.png"
my-API-name:attribute1="some data"
my-API-name:attribute2="some other data">
然后我使用 `getAttribute('my-API-name:attribute1') 从 JavaScript 访问附加标签数据。
(我将所有具有特定类名的标签选择到一个数组中,然后依次处理每个标签,以防有人感兴趣。)
这一切都很好 - 我可以根据附加数据根据需要操作 <IMG> 标签,但是根据 W3C 验证器,标记不是有效的 HTML。
通过以上我得到:
Warning Attribute my-API-name:attribute1 is not serializable as XML 1.0.
Warning Attribute my-API-name:attribute2 is not serializable as XML 1.0.
Error: Attribute my-API-name:attribute1 not allowed on element img at this point.
Error: Attribute my-API-name:attribute2 not allowed on element img at this point.
如果我从属性名称(例如 my-API-name-attribute2)中删除 :,“不可序列化”警告会消失,但我仍然会收到“不允许”错误。
那么,我如何将这些额外的数据位添加到 <IMG> 标记而不使标记无效,但同时通过以 AddThis 的方式包含“my-API-name”部分来保持一定程度的清晰度/品牌形象?
(我从 cmets 注意到我可以使用 data- 属性。我还没有尝试过这些,但我希望能够以 AddThis 似乎没有管理的“品牌”方式做到这一点破坏用户的标记。)
【问题讨论】:
-
看起来像一个 xml 命名空间。
-
他可能将 HTML5 数据属性与 XML 命名空间混淆了。
-
显然 HTML5 规范是 permissible enough to allow XML attributes。
<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml"> ...是有效的 HTML。 -
数据属性看起来很有趣...现在阅读。但是,是的,一个 xml 命名空间正是它对我的样子(不是我在问题中写的模式),但是你将如何扩展文档命名空间以包含你自己的 JavaScript 命名空间?
标签: javascript css html