【问题标题】:Increment attr value using jquery .each()使用 jquery .each() 增加 attr 值
【发布时间】:2014-07-26 17:09:27
【问题描述】:

我正在使用 impress.js 进行演示,而不是将其用于花哨的东西,我只希望幻灯片彼此相距 900 像素。我可能需要根据演示文稿的长度添加/删除幻灯片,而不是更改每个 data-y 值,我想使用 jQuery 循环遍历我的每张幻灯片并在每个幻灯片位置添加 900px。这是我正在使用的 jQuery:

var counter = 0;
$('.slide').each(function(){
    var posY = counter * 900;
    $(this).attr("data-y", posY);
    counter++;
});

但它不会将值添加到我的 html 中的 data-y 属性。我相信代码是正确的,我只是不确定为什么它不起作用。

【问题讨论】:

  • 你如何检查你的 HTML ???一旦元素 .slide 在 DOM 中可用,您是否调用此 sn-p?

标签: javascript jquery html increment impress.js


【解决方案1】:

尝试使用data()函数更改数据值

$(this).data("y", posY);

来自文档

HTML5 数据-* 属性

从 jQuery 1.4.3 开始,HTML 5 数据属性将自动 拉入 jQuery 的数据对象。属性的处理 jQuery 1.6 中更改了嵌入式破折号以符合 W3C HTML5 规范。

【讨论】:

  • 得分!谢啦。完美运行。到时将标记为答案。
  • 等等,这应该如何更新 HTML?!这设置了数据对象的属性,而不是属性
  • @A.Wolff,他正在尝试更新 HTML 5 数据对象,所以我提出了这个建议,看起来它对他有用
  • @Murali 我没有读过这样的问题,但我不知道 impress.js 所以......很高兴 OP 找到了 she 正在寻找的东西...... . :)
  • 当吉特!它实际上不起作用。只是努力刷新,什么都没有。
【解决方案2】:

要在更少的代码中执行此操作,请使用每个循环的索引作为乘数

$('.slide').each(function(i){
    var posY = i * 900;
    $(this).data("y", posY);
});

【讨论】:

  • $('.slide').each(function(i){ $(this).data("y", (i*900)); });
  • 代码效率更高,代码不可读。我更喜欢高效的方式。
  • @JonathonBlok 它的空白完全可读,但它被去掉了 cmets。
  • @halabuda 很公平,我没听懂
猜你喜欢
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多