【问题标题】:Assign variable to $(this).data("whatever") or no?将变量分配给 $(this).data("whatever") 还是不?
【发布时间】:2016-04-13 14:17:17
【问题描述】:

在使用 jquery data() 读取值时是否有(性能/cpu)工作?

所以...我有几个链接/按钮,类似于以下

<a href='#' class='ui-btn' data-counter='1234'>test</a>

单击链接时,将执行一个事件。在事件处理过程中,我不止一次需要 counter 的值。我应该每次都从源中读取值(因此,使用 $(this).data("counter") )还是应该这样做

var counter=$(this).data("counter");

到处都是引用计数器?

【问题讨论】:

    标签: jquery jquery-data


    【解决方案1】:

    这完全取决于您,但每次拨打$(this).data("counter") 时都需要工作。这可能并不重要,但从长远来看,将其抓取到本地会更短,并节省奇数微秒。


    请注意,除非您确实需要data 的功能,否则您可能希望使用attr 来代替:+$(this).attr("data-counter")(开头的+ 从字符串转换为数字,data 为您做全数字字符串)。 data 不是 data-* 属性的访问器,它是该元素的 jQuery 数据缓存的访问器。第一次在元素上调用它时,它会创建缓存并从元素上的所有data-* 属性中填充它,然后保留它们当时的副本。 (并且将其用作 setter 不会更改属性,在元素上使用 data 后更改属性也不会更改 data 的值副本。)@ 987654334@ 只是属性的访问器。

    【讨论】:

    • 谢谢你...你已经纠正了一些事情 - 我之前在 jquery 论坛中提出了一个问题,我认为并被告知使用 .data() 但从未解释过开销。您的回答很好地解释了使用 attr 和 data 的优点。向你致敬!
    • @fiprojects:乐于助人。你会惊讶于有多少人认为data("foo") 只是attr("data-foo") 的简写。
    【解决方案2】:

    如果将值存储到变量中:

    var counter=$(this).data("counter");
    

    然后:

    counter++;
    ...
    counter++;
    

    最后再更新你的数据属性:

    $(this).data("counter", counter);
    

    可能会更快。

    【讨论】:

    • 谢谢,但是计数器引用了一个大数组中的记录元素,不会增加
    猜你喜欢
    • 2016-05-12
    • 1970-01-01
    • 2018-03-28
    • 2017-10-20
    • 1970-01-01
    • 2015-11-16
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多