使用on来获取生成的日期并重用它jquery

时间:2013-08-16 19:35:59

标签: javascript jquery live momentjs

有一个jquery插件生成的日期列表。我可以用moment.js做到这一点并且有效:

看到这个小提琴(http://jsfiddle.net/UJ9z4/)。

当我尝试在插件运行时将其应用于实时文件时,我收到一个未定义的错误。

我理解这意味着,我无法抓住日期,因为它是在DOM中新创建的。所以,我正在尝试使用" on"在加载后抓取跨度的内容,但它无法正常工作。我尝试了不同的方式来查看不同的线程,似乎没有工作。

这是代码

    <!--template for calendar list -->      
    <div id="cactuscal">
   <div class="gcf-item-container-block">
  <div class="gcf-item-block">
    <div class="gcf-item-header-block">
      <div class="gcf-item-date-block">
        <span class="gcf-item-daterange"></span>
      </div>
      <div class="gcf-item-title-block">
        <strong class="gcf-item-title"></strong>
      </div>
    </div>
    <div class="gcf-item-body-block">
      <div class="gcf-item-description">
      </div>
      <div class="gcf-item-location">
      </div>
    </div>
  </div>
</div>
</div><!--template for calendar list -->        
    <script type="text/javascript">

      $('#cactuscal').gCalFlow({
        calid: 'myaddress@gmail.com',
        link_item_title: false,
         maxitem: 6,
    daterange_formatter: function(sd, ed, allday_p) { return "<span class='startdate' data-date='" + (sd.getFullYear()) + "-" + (sd.getMonth() + 1) + "-" + (sd.getDate()) +"'>" + "</span>" + " – " + "<span id='enddate'"+">" + (ed.getFullYear()) + "-" + (ed.getMonth() + 1) + "-" + (ed.getDate()) + "</span>" }
      });

    </script>
<script type="text/javascript">
$(document).on("ready",function(){
    $('.startdate').each(function () {
    var then = $(this);

date = moment(then.attr('data-date')),
update = function(){
    then.html(date.format("dddd[(]M[/]D[)]"));
    then.trigger('onCreated');
};

update();
setInterval(update, 60000);
});
    });
</script>

gcalflow中没有选项以我想要的方式格式化日期范围所以我想用时刻来抓取字符串并以这种方式重新格式化。

我需要在gcalpro脚本中创建一个新选项来格式化我想要的方式吗?或者这会有用吗? html部分是Google日历Feed的模板。第一个js是调用gcalflow来显示日历源。最后一个js是重新格式化格式化的日期。

1 个答案:

答案 0 :(得分:0)

gCalFlow调用异步工作,因此在创建gCalFlow的DOM元素之前,会调用用于更新元素的代码。 (您无法准确知道gCalFlow何时创建元素)

您应该做的是在cCalFlow调用中将代码添加为回调函数。这样在 cCalFlow完成后它就会被称为

$('#cactuscal').gCalFlow({
    calid: 'myaddress@gmail.com',
    link_item_title: false,
    maxitem: 6,
    daterange_formatter: function(sd, ed, allday_p) {
        return "<span class='startdate' data-date='" + (sd.getFullYear()) + "-" + (sd.getMonth() + 1) + "-" + (sd.getDate()) + "'>" + "</span>" + " – " + "<span id='enddate'" + ">" + (ed.getFullYear()) + "-" + (ed.getMonth() + 1) + "-" + (ed.getDate()) + "</span>"
    },
    callback: afterGCalFlowIsFinished
});

function afterGCalFlowIsFinished(){
    $('.startdate').each(function() {
        ...
    }
}