2011-04-28 65 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