【问题标题】:Jquery .attr(attrname) doesn't always work?Jquery .attr(attrname) 并不总是有效?
【发布时间】:2011-09-18 05:55:08
【问题描述】:

我必须在 js 脚本中获取属性值。 当我使用 Jquery 方法 elem.attr() 来检索该值时,我注意到在某些情况下,该方法不起作用。 例如:

<li value="1409079461">

如果我在这个元素上调用 $(this).attr("value"),它会返回正确的值,但是

<li value="100001794127456">

如果我在最后一个元素上调用该方法,该元素具有更多位数的属性,.attr("value") 返回 0。

有人知道这种奇怪行为的原因吗?该方法可以处理的数据量是否有限制?

【问题讨论】:

  • 我不能在 Chrome 12、OS X 上重现此问题。可能是浏览器特定问题?

标签: java jquery html dom


【解决方案1】:

我不知道为什么它不起作用。

但它不是有效的 HTML。

如果您使用数据属性,它将起作用:http://jsfiddle.net/f75LT/

<ul>
    <li data-value="1409079461">Test1</li>
    <li data-value="100001794127456">Test2</li>
</ul>

$(document).ready(function() {
    $('li').click(function() {
        console.log($(this).data('value'));
    });
});

【讨论】:

  • jQuery 不需要是有效的 HTML 来获取属性。此外,数据后缀是 HTML5 特定的,但我知道你要去哪里。
  • @Digbyswift。这就是我所说的I don't know why it doesn't work
【解决方案2】:

LI 的值为整数,最大整数为 2,147,483,647,其他均为 0

【讨论】:

  • 还有“value 属性已被弃用,但在所有主流浏览器中仍受支持。”,未来需要考虑的事情
【解决方案3】:

jQuery 正在尝试将值转换为整数,该值太大且默认为零。

如果您需要这个值,那么我建议在开头放置一个下划线字符,以强制 jQuery 将其视为一个字符串。然后你可以去掉下划线。

【讨论】:

    【解决方案4】:

    我不知道,但我查看了 W3C 建议,似乎 &lt;li/&gt; 节点可以具有 value 属性,该属性应该是 number,如 here 所述,但它被标记为已弃用时间>。因此,正如其他人(@Ivanov 和@Digbyswift)提到的那样,它将被转换为数字。

    我用 jsFiddle 检查了一个示例代码,here,它实际上在 Safari 中工作,但如果你真的不需要,我不会使用 value 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多