Con*_*ine 78 html xhtml unobtrusive-javascript
我知道这是有些人不同意它们的原因,但它真的重要吗?我认为他们提供的功能,与JavaScript交互以及从服务器存储和发送信息,都超过了验证问题.我错过了什么吗?"无效"HTML的后果是什么?并且自定义DTD不会解决它们吗?
Spl*_*iFF 76
结果是w3c在2年,5年,10年后出现并创建了一个具有相同名称的属性.现在您的页面已损坏.
HTML5将为合法的自定义属性(例如data-myattr ="foo")提供数据属性类型,因此您可以立即开始使用它,并且对未来的名称冲突相当安全.
最后,您可能会忽略自定义逻辑是类属性背后的理性.尽管通常将其视为样式属性,但实际上它是在元素上设置自定义元属性的合法方式.不幸的是,你基本上只限于布尔属性,这就是HTML5添加数据前缀的原因.
BTW,"基本上是布尔"我的意思是原则上.实际上,没有什么可以阻止您在类名中使用分隔符来定义自定义值和属性.
class="document docId.56 permissions.RW"
小智 22
是的,您可以使用"数据"合法地添加自定义属性.
例如:
<div id="testDiv" data-myData="just testing"></div>
Run Code Online (Sandbox Code Playgroud)
之后,只需使用最新版本的jquery来执行以下操作:
alert($('#testDiv').data('myData'))
Run Code Online (Sandbox Code Playgroud)
或者设置数据属性:
$('#testDiv').data('myData', 'new custom data')
Run Code Online (Sandbox Code Playgroud)
由于jQuery几乎适用于所有浏览器,因此您不应该遇到任何问题;)
更新
Alo*_*hci 10
验证本身并不是目的,而是一种用于帮助及早发现错误的工具,并减少在多种浏览器类型上使用时网页可能面临的神秘渲染和行为问题的数量.
添加自定义属性现在不会影响这些问题,也不会在将来影响这些问题,但由于它们不验证,这意味着当您评估页面验证的输出时,您需要仔细挑选重要的验证问题和不重要的验证问题.每次更改页面并重新验证时,都必须重复此操作.如果您的页面完全验证,那么您将获得一个很好的绿色PASS消息,您可以继续进行下一个测试阶段,或者进行下一个需要进行的更改.
我看到人们痴迷于验证做得比使用简单的自定义属性更糟/更奇怪的东西:
<base href="http://example.com/" /><!--[if IE]></base><![endif]-->
Run Code Online (Sandbox Code Playgroud)
在我看来,自定义属性确实无关紧要.正如其他人所说,注意标准中未来添加的属性可能会很好.但是现在我们在HTML5中有data-*属性,所以我们已经保存了.
真正重要的是你有正确的嵌套标签和正确引用的属性值.
我甚至使用自定义标签名称(由HTML5引入的那些,如页眉,页脚等),但这些名称在IE中存在问题.
顺便说一句,我经常讽刺地发现所有那些验证狂热者如何在谷歌的聪明技巧面前鞠躬,如iframe上传.
您可以使用JSON将HTML元素与属性相关联,而不是使用自定义属性:
var customAttributes = { 'Id1': { 'custAttrib1': '', ... }, ... };
Run Code Online (Sandbox Code Playgroud)
至于分歧,请参阅SpliFF的回答.
小智 5
在class属性中存储多个值不是正确的代码封装,只是一种令人费解的黑客行事方式.以自定义广告旋转器为例,使用jquery.在页面上要做得更干净
<div class="left blue imagerotator" AdsImagesDir="images/ads/" startWithImage="0" endWithImage="10" rotatorTimerSeconds="3" />
Run Code Online (Sandbox Code Playgroud)
并让一些简单的jquery代码从这里完成工作.任何开发人员或网页设计师现在都可以处理广告轮播,并在没有太多问题时将值更改为此值.
一年后重新投入项目或进入一个新的项目,前一个开发人员分裂并前往太平洋某个地方的某个岛屿,当代码以不明确的加密方式编写时,他们会试图找出意图,如下所示:
<div class="left blue imagerotator dir:images-ads endwith:10 t:3 tf:yes" />
Run Code Online (Sandbox Code Playgroud)
当我们用c#和其他语言编写代码时,我们不编写将所有自定义属性作为空格分隔字符串放在一个属性中的代码,并且每次我们需要访问或写入时都必须解析该字符串.想想下一个将对您的代码起作用的人.