2011-04-28 44 views
4

我使用的是HTML5“数据”属性的元素,我要的属性值赋值给一个变量,只有当它存在,如果它不是空:

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

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

+1

你确定数据是什么? – Neal 2011-04-28 16:12:50

+1

您是否输出了语句的条件部分以查看它是否可以真正解析为真或假?如果没有,请更改您的条件,以便它可以工作 – 2011-04-28 16:13:37

+0

好的,问题是'$(this)'是我所期待的其他内容:)对不起,我很抱歉:x – Alex 2011-04-28 16:38:55

回答

5

使用短路是更简单,更高效:

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

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

+0

loooove这样做。打我回答:p – 2011-04-28 16:16:12

+0

jQuery将'data- *'属性视为'.data()'。请参阅@amit_g的演示。 – 2011-04-28 16:26:18

+0

@火箭,不知道。我删除了我的警告。它现在是否真的将数据存储为属性?如果不是,如果更新数据而不是属性会发生什么? – 2011-04-28 16:29:01

2

根据文档:

。数据()

的。数据()方法允许我们附加任何类型的DOM 数据 中的元素可以从圆形 引用并因此从内存 泄漏。

.attr()

的.attr()方法获取属性值 仅在 所述匹配组的第一个元素。

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

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

jQuery将'data- *'属性视为'.data()'。请参阅@amit_g的演示。 – 2011-04-28 16:26:09

+1

@火箭:使用'.attr()'可以更快。检查出http://jsperf.com/data-vs-attr – Shaz 2011-04-28 16:43:48

3

看起来像$(这个)不是你期望的那样。除此之外,声明看起来很好。 Demo