2016-09-30 10 views
0

私のカレンダーで行ごとに複数のイベントを表示するためにfullcalendarをハックしようとしています。ですから、私はこの行を繰り返して内容を再構成したいと思っています。しかし、jQueryはこれらの行をfind()できません。jQueryが追加された要素を見つけません

<div class="fc-content-skeleton"> 
    <table> 
     <thead> 
      <tr> 
       <td class="fc-day-number fc-mon fc-past" data-date="2016-09-26">26</td> 
       <td class="fc-day-number fc-tue fc-past" data-date="2016-09-27">27</td> 
       <td class="fc-day-number fc-wed fc-past" data-date="2016-09-28">28</td> 
       <td class="fc-day-number fc-thu fc-past" data-date="2016-09-29">29</td> 
       <td class="fc-day-number fc-fri fc-today fc-state-highlight" data-date="2016-09-30">30</td> 
       <td class="fc-day-number fc-sat fc-other-month fc-future" data-date="2016-10-01">1</td> 
       <td class="fc-day-number fc-sun fc-other-month fc-future" data-date="2016-10-02">2</td> 
      </tr> 
     </thead> 
     <tbody> 
      <tr> 
       <td rowspan="2"></td> 
       <td class="fc-event-container" rowspan="2"> 
        <a class="fc-day-grid-event fc-h-event fc-event fc-start fc-end event-free" data-url=""></a> 
       </td> 
       <td rowspan="2"></td> 
       <td class="fc-event-container"> 
        <a class="fc-day-grid-event fc-h-event fc-event fc-start fc-end event-mine" data-url=""></a> 
       </td> 
       <td class="fc-event-container"> 
        <a class="fc-day-grid-event fc-h-event fc-event fc-start fc-end event-free" data-url=""></a> 
       </td> 
       <td rowspan="2"></td> 
       <td rowspan="2"></td> 
      </tr> 
      <tr> 
       <td class="fc-event-container"> 
        <a class="fc-day-grid-event fc-h-event fc-event fc-start fc-end event-taken" data-url=""></a> 
       </td> 
       <td class="fc-event-container"> 
        <a class="fc-day-grid-event fc-h-event fc-event fc-start fc-end event-free" data-url=""></a> 
       </td> 
      </tr> 
     </tbody> 
    </table> 
</div> 

私は.fc-content-skeletontableタグを取得することができています。しかし、私が 'find( "table")children()'と呼び出すと、返すのはtheadだが、私が必要とするのはtbodyではない。私は、すべての出来事が取り出されて追加された後にそれをやっています。

EDIT

次のように関数が呼び出されます。

$(document).on("ready turbolinks:load", function(){ 
     //..... 

     $("#calendar").fullCalendar(calendarOpt); 
     $("#calendar").reorganizeEvents(); 

     //..... 
}): 

機能自体:

(function($) { 
    $.fn.reorganizeEvents = function(){ 
    if(reorgHandler == false){ 
     $(this).fullCalendar('render'); 
     var $dayContainers = $(this).find(".fc-row .fc-content-skeleton table") 
      .children(); //obtaining children of the table in .fc-skeleton. 
      // Supposed to be <thead> and <tbody> 
      console.log($dayContainers); //successfully finds table 
      $dayContainers.each(function(index){ 
      console.log($(this)); //shows only <thead> as a single child 
      }); 
      reorgHandler = true; 
     } 
     } 
    }(jQuery)); 
+10

このJavaScriptコードはどこで呼び出されていますか?私のクリスタルボールは、要素が存在する前に要素にアクセスしようとしているということです。 – epascarello

+0

@epascarelloこれまた、存在する前の変数値で作業している可能性があります。 'find()...'がいつ書き出されるかによって異なります。 – krillgar

+0

@epascarello fullcalendarが 'document.ready'関数でインスタンス化された後、' $( "#calendar") 'でそれを呼び出しています。 – mityakoval

答えて

2

はの閉鎖前に、ページの一番下にあなたのJavaScriptを置きますthe </body>

または使用

$(document).ready(function(){ 
    $(".fc-content-skeleton").find("table").children(); 
}) 
+0

私は 'document.ready'ブロックから関数を呼び出しています。私はそれがどのように行われたかを示すために質問を更新しました。 – mityakoval

0

@epascarelloが指摘したように、要素はアクセスしようとしていた瞬間にレンダリングされませんでした。レンダリング関数を明示的に呼び出しても問題は解決されませんでした。ただし、fullcalendarにはすべてのイベントがレンダリングされた後に起動するeventAfterAllRenderコールバックがあります。このコールバックで自分の関数を呼び出すと、問題が解決されました。

0

あなたは要素がレンダリングされることを待ってから、それを選択することができますeventAfterRender

の使用に関する。

関連する問題