2015-05-14 75 views
1

添加數據()到HTML元素我只是寫了一個非常簡單的代碼片段,以瞭解如何jQuery的data()功能,代碼如下:採用新的運營商

$(function() {  
     carousel = function() { 
      this.prop1 = 1; 
      this.prop2 = 'two'; 
      this.prop3 = 3; 
     } 
     var _str = $('#test'), 
     $str_data = _str.data(); 
     console.log($str_data); 
     data = _str.data('carousel'); 

     if (!data) _str.data('carousel' , new carousel()); 
     console.log(data); 

     if (!data) { 
      console.log('no data'); 
     } 
}); 

現在,這段代碼的目的是儘管我使用下面的代碼行向div元素添加數據,但是在我的代碼段中添加數據()到div元素,然後檢查是否添加了這一段數據:

if (!data) _str.data('carousel' , new carousel()); 

當我再次檢查,看從下一行的數據是否實際上添加:

if (!data) { 
    console.log('no data'); 
} 

測試通過,這意味着不添加數據。那麼我錯過了什麼?

+0

你不應該登錄(''的_str.data),而不是'data'?因此,您可以獲取新的更新數據,而不是舊var。我不知道它是一個實例,還是它? – steven

+0

你的_str.data('carousel')從數據開始?如果你在data = _str.data('carousel')前做了一個console.log的_str.data('carousel'),你會得到什麼? ?如果您沒有啓動數據,那麼'carouse'的設置將不會執行。 – Taplar

+0

@Taplar,我得到'undefined'。 –

回答

1

如果沒有數據,則更新與元素關聯的數據,但data變量所引用的值未更新,這就是爲什麼它仍將undefined作爲其值。

$(function() { 

    var carousel = function() { 
     this.prop1 = 1; 
     this.prop2 = 'two'; 
     this.prop3 = 3; 
    } 

    var _str = $('#test'), 
     $str_data = _str.data(); 

    console.log($str_data); 

    var data = _str.data('carousel'); 

    if (!data) { 
     //create a new carousel and assign it to data so that it gets a new value 
     data = new carousel(); 
     //store the new carousel value 
     _str.data('carousel', data); 
    } 

    console.log(data); 

    if (!data) { 
     console.log('no data'); 
    } 

}); 

演示:Fiddle

+0

或不應該'_str.data('carousel',(new carousel()));'也工作? –

+0

@Tenali_raman將設置元素的數據,但局部變量'數據'不會被更新 –

+0

你是否引用數據裏面,如果作爲本地? –

1

的問題是,你不更新data變量的值。你需要要麼再次data值設置設置轉盤後或直接調用jQuery函數.data()爲波紋管的例子:

data = _str.data('carousel'); 

// this condition is not updating the variable defined above 
if (!data) { 
    _str.data('carousel' , new carousel()); 
} 

console.log(data); 

// you have to update the variable value or to call as 
if (!_str.data('carousel')) { 
    console.log('no data'); 
} 
+0

爲什麼'_str.data('carousel''工作和'數據'不工作,當兩者實際上是相同的,因爲'data = _str.data('carousel');',如果你能解釋,我會接受你的回答! –

+0

以下問題的接受答案是明確地指出'傳遞參考'的意思,並且這在JavaScript中不可用http://stackoverflow.com/questions/7744611/pass-變量按引用-在JavaScript的 –