2013-05-28 39 views
0

我做了一個列出幾個月的函數。使元素擁有自己的變量?

function genDate() { 
     var d = new Date(); 

     var monthNames = [ "JAN", "FEB", "MAR", "APR", "MAY", "JUN", 
     "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" ]; 

     var day = d.getUTCDate().toString(); 
     var mon = d.getUTCMonth(); 
     var year = d.getUTCFullYear(); 

     $("#day").prepend('<span id="day_num">' + day + '</span>'); 

     var cc = mon; 
     for (var i = 0; i < 12; i++) { 
      $("#date_cont").append('<div class="month"><a href="" 
        onclick="return false;" >' + monthNames[cc] + '</a></div>'); 

      cc++; 

      if (cc > 11) { 
       cc = 0; 
      } 
     } 
    } 

我想要做的是有生成的.months元素持有這樣的可以通過其它功能一起使用它的一個月指數(0-11)不同的變量。我猜這些元素會充當對象(.month類的每個元素都擁有自己獨特的值)。我是新來的JavaScript,所以我不知道如何實現這一點。

回答

1

當然,只要將它添加到數據屬性,並在以後得到它?

for (var i = 0; i < 12; i++) { 
    var a = $('<a />', {href: '#', text: monthNames[i] }), 
     div = $('<div />', {'class': 'month', 'data-month': i }); 
               // ^^^^^ add a data attribute ! 
    $("#date_cont").append(div.append(a)); 
} 

,以後你可以這樣做:

$('.month').on('click', function(e) { 
    e.preventDefault(); 
    var idx = $(this).data('month'), 
     month = monthNames[idx]; 

    alert(month); 
}); 

FIDDLE

+0

謝謝,這真的有幫助。問題:你爲什麼包含e.preventDefault()? – Mushy

+0

@Andy - 點擊一個錨點,這只是一個好習慣。錨點不應該有一個空的href,所以通常會使用一個散列,但是當單擊該頁面時會將頁面滾動到頂部,並且preventDefault會阻止該點,或者在單擊錨點時阻止其他任何其他默認操作。最後一點只是如何從元素獲取數據屬性的一個例子。 – adeneo

+0

@adeneo您可以隨時將'href'設置爲'href =「javascript:;」'並避免可能遇到的問題(如果您因爲某些原因必須將它們保留爲定位標記)。 –

0

由於您使用jQuery的...如果你有一個元素...

var elem = $('<div></div>'); 
elem.data('day', someValue); //sets 'day' to someValue's value 
elem.click(function(e){ 
    var d = $(this).data('day'); 
}); 

注意:您可以指定任何你想要的屬性(儘量不衝突)DOM元素上。

var elem = document.getElementById("mine"); 
elem.somePropertyName = someValue; 

而且,data- *屬性被認爲是將其推入標記的適當方式。

$('#elem').attr('data-day', someValue); 
or 
<div id="elem" data-day="someValue">...</div> 
+0

謝謝!快速問題,getElementById返回什麼類型? – Mushy

+0

它返回實際的DOM元素,根據它的id或未定義... – Tracker1