【问题标题】:jQuery $.data() conditional statementjQuery $.data() 条件语句
【发布时间】:2011-04-28 16:10:51
【问题描述】:

我在一个元素上使用了 html5“数据”属性,并且我只想将属性值分配给一个变量,前提是它存在且不为空:

var xxx = $(this).data('what') ? $(this).data('what') : 'default_value';

但它不起作用。我总是得到默认值...

【问题讨论】:

  • 你确定数据——在任何时候都存在吗?
  • 你有没有输出语句的条件部分,看看它是否真的可以解析为真假?如果没有,请更改您的条件以使其正常工作。
  • 好的,问题是 $(this) 不是我所期望的 :) 抱歉我很笨 :x

标签: javascript jquery html jquery-data


【解决方案1】:

使用短路更简单、更高效:

var xxx = $(this).data('what') || 'default_value';

但是假设数据存在(正如评论者指出的那样),您的代码无论如何都应该可以工作。

【讨论】:

  • 很高兴这样做。击败我的答案:p
  • jQuery 将data-* 属性视为.data()。请参阅 @amit_g 的演示。
  • @Rocket,不知道。我删除了我的警告。它现在实际上将数据存储为属性吗?如果没有,如果更新数据而不更新属性会发生什么?
  • 所以基本上它会在第一次访问时复制data-* 值,但是一旦通过$.data 进行更改,它们就会不同步。
  • 如果没有 data-what 属性,你们知道$(this).data('what'); 会有什么值吗?
【解决方案2】:

看起来 $(this) 不是您期望的那样。除此之外,该声明看起来不错。 Demo

【讨论】:

    【解决方案3】:

    根据文档:

    .data()

    .data() 方法允许我们附加 任何类型的数据到 DOM 元素中 远离圆形的安全方式 引用,因此来自记忆 泄漏。

    .attr()

    .attr() 方法获取属性 仅第一个元素的值 匹配的集合。

    所以你想要的是使用 .attr() 方法,像这样:

    var xxx = $(this).attr('data-what') || 'default_value';
    

    【讨论】:

    • jQuery 将data-* 属性视为.data()。请参阅 @amit_g 的演示。
    • @Rocket:使用.attr() 会更快。查看jsperf.com/data-vs-attr
    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 2011-12-04
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多