是通过标签常用做法中的id属性将值传递给javascript / JQuery吗?安全吗?

时间:2010-09-15 11:13:12

标签: php javascript jquery html tags

我发现自己做了很多事情,用于动画目的的特定属性,特别是当我使用通过PHP获得的数据库值生成某些内容时。有没有理由不这样做。

一些示例代码,以消除歧义。

这将是JQuery:

$('.class').each(function(){
    var my_new_width = $(this).attr('id');
            $(this).stop(false, true).animate({width: my_new_width}, 100);
}); 

HTML将是:

<img id='100' src='path'/>

显然,此代码不提供任何功能,并且可以与.hover()或其他内容一起使用。只是想澄清问题中的含糊不清。

4 个答案:

答案 0 :(得分:2)

根据W3C id's must begin with a letter,如果你不这样做,我认为不会爆炸。在HTML5中,您将尝试嵌入数据时使用data-前缀。

有关更多讨论和信息,请参阅此SO问题:Custom attributes - Yea or nay?

就个人而言,我更喜欢使用rel属性......出于某种原因,我觉得这对我来说是正确的......即使它错了而且不符合w3c。

答案 1 :(得分:1)

如果您的意思是我认为您的意思,这是一种非常常见的做法,您应该发现它相对安全,如果您包含一些示例代码会有所帮助。

只要您的元素上的ID是唯一的,您就不应该同时访问多个元素。

Here are the jQuery docs on the Id selector.。基本上,语法是$("#elementId")。由于选择器只是一个字符串文字,你可以用这种方式注入一个元素的id:$("#" + elementId),其中elementId在这种情况下是一个变量。

不这样做的唯一原因是当你发现自己为了许多元素而反复重复相同的jQuery时,脚本之间的唯一区别就是Id传递。在这种情况下,您应该使用类选择器:

当你真正体验jQuery的强大功能时,就是当你开始使用选择器语法选择类时:$(“。className”)。这将返回元素的“包装集”,本质上是匹配元素的数组。

它允许您在一次调用中将beahviour绑定到多个元素。正是这个功能大大减少了我的大多数页面上的脚本行数。

答案 2 :(得分:1)

使用id属性作为信息的占位符是常见做法且安全,只要您注意一些指导原则:

  • ID必须是唯一的
  • 不允许以数字
  • 开头

更有争议的是为占位符使用自定义属性。使用jQuery可以很容易地从属性中分配和检索值。这将使您的代码更易于阅读和维护,但它会破坏HTML验证。

答案 3 :(得分:1)

这对我来说似乎非常违反直觉,主要是因为你似乎不太可能保证唯一性,但也因为它不是一个ID的意思 - 它会让其他人阅读你的代码感到困惑。

也许如果你发布一个更完整的例子来说明你如何使用它,人们会更容易提出更好的方法。