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