2017-08-09 13 views
0

のために、私は同じ出力が異なるページのカップル間で複数のdivの後に表示するスクリプトinsertAfterが複数のdiv

.on('finish.countdown', function(event) { 
     $(this).text("<?php echo TEXT_SHIPPING_BARELY_PAST_DISPATCH; ?>").parent().addClass('disabled'); 
    }) .insertAfter('#cartDefaultHeading'); 

の次のセクションがあります。 div名を変更すると、期待どおりに新しい場所に表示されます。 しかし、私がそれを複数に出現させようとすると、出力が得られません。

私は、次の

.on('finish.countdown', function(event) { 
     $(this).text("<?php echo TEXT_SHIPPING_BARELY_PAST_DISPATCH; ?>").parent().addClass('disabled'); 
    }) .insertAfter('#cartDefaultHeading').insertAfter('#checkoutOrderHeading'); 

.on('finish.countdown', function(event) { 
    $(this).text("<?php echo TEXT_SHIPPING_BARELY_PAST_DISPATCH; ?>").parent().addClass('disabled'); 
}) .insertAfter('#cartDefaultHeading'), .insertAfter('#checkoutOrderHeading') ; 

とさえ

.on('finish.countdown', function(event) { 
    $(this).text("<?php echo TEXT_SHIPPING_BARELY_PAST_DISPATCH; ?>").parent().addClass('disabled'); 
}) .insertAfter('#cartDefaultHeading'); 
    $(this).text("<?php echo TEXT_SHIPPING_BARELY_PAST_DISPATCH; ?>").parent().addClass('disabled'); 
}) .insertAfter('#checkoutOrderHeading'); 

なしに働いていない試みました。私が複数のdivでそれを取得しようとするたびに、どちらもそれを取得しません。 これを達成するための正しい構文は何ですか?完全なスクリプトを以下に示し

<script> 
jQuery(function($){ 
if (($('#cartDefaultHeading').length || $('#checkoutOrderHeading').length) && !$('.checkout_dispatch_timer').length) { 
    var $this = $('<div class="checkout_dispatch_timer <?php echo $dispatch_countdown_timer_style; ?>"></div>'); 
    <?php if ($dispatch_countdown_timer_disable === false) { ?> 
    var finalDate = moment.tz('<?php echo $dispatch_countdown_timer_date_array[4]; ?>', '<?php echo date_default_timezone_get(); ?>'); 
    $this.countdown(finalDate.toDate()) 
    .on('update.countdown', function(event) { 
     var format = '%Mm'; 

     if (event.offset.totalDays > 0) { 
      format = '%Dd:%Hh:' + format; 
     } else if (event.offset.totalHours > 0) { 
      format = '%Hh:' + format; 
     } else { 
      format = format + ':%Ss'; 
     } 

     dispatch_countdown_timer_text = "<?php echo $dispatch_countdown_timer_text; ?>"; 
     dispatch_countdown_timer_text = dispatch_countdown_timer_text.replace('%s', event.strftime(format)); 

     $(this).text(dispatch_countdown_timer_text); 

    }) 
    .on('finish.countdown', function(event) { 
     $(this).text("<?php echo TEXT_SHIPPING_BARELY_PAST_DISPATCH; ?>").parent().addClass('disabled'); 
    }) 
    .insertAfter('#cartDefaultHeading'); 
<?php } else { ?> 
    $this.text("<?php echo $dispatch_countdown_timer_text; ?>").insertAfter('#checkoutOrderHeading'); 
<?php } ?> 
} 
}); 
</script> 
+0

何を挿入しようとしていますか?挿入される要素は、エコーしているテキストではなく、 '.on()'の前の要素です。 – Barmar

+0

@Barmarデータベースに設定された値に基づいてmoment.jsで計算された時間を挿入します。また、残ったタイルの量に応じて特定のメッセージを作成します。 var $ dispatch_countdown_timer_textにあるメッセージの内容 –

+0

「insertAfter」は、ページがロードされたときに発生し、イベントが発生したときは発生しません。それはあなたが欲しいものですか? – Barmar

答えて

1

あなたは、.insertAfter()を複数回使用することはできません。 .afterを使用してください。

$('#cartDefaultHeading, #checkoutOrderHeading').after(
 
    $this.countdown(finalDate.toDate()) 
 
    .on('update.countdown', function(event) { 
 
    var format = '%Mm'; 
 

 
    if (event.offset.totalDays > 0) { 
 
     format = '%Dd:%Hh:' + format; 
 
    } else if (event.offset.totalHours > 0) { 
 
     format = '%Hh:' + format; 
 
    } else { 
 
     format = format + ':%Ss'; 
 
    } 
 

 
    dispatch_countdown_timer_text = "<?php echo $dispatch_countdown_timer_text; ?>"; 
 
    dispatch_countdown_timer_text = dispatch_countdown_timer_text.replace('%s', event.strftime(format)); 
 

 
    $(this).text(dispatch_countdown_timer_text); 
 

 
    }) 
 
    .on('finish.countdown', function(event) { 
 
    $(this).text("<?php echo TEXT_SHIPPING_BARELY_PAST_DISPATCH; ?>").parent().addClass('disabled'); 
 
    }) 
 
);

これは、あなたが複数の場所(.after.insertAfterで同じ要素を挿入することはできませんので、任意のページだけコピーを作成していない、#cartDefaultHeadingの一つと#checkoutOrderHeadingを持っていることを前提としてい要素自体を移動します)。

+0

その結果、divのいずれにも出力されませんでした。元の質問を編集してスクリプト全体を表示しましたが、そこにあるPHPコードは除外しました。 –

+0

答えが – Barmar

+0

に更新されました。これは、メインタイマーイベントに対して完全に機能します。 私は、このセクションの上記コードの最後に出力される有効期限切れのメッセージを追加するのと同じ問題があると仮定します。 <?php} else {?> $ this.text( "<?php echo $ dispatch_countdown_timer_text;?> ")。insertAfter( '#checkoutOrderHeading');

0

ドキュメントによると、あなたは関数に要素の配列を渡すことができます。 出典:それぞれが次の後にそれを挿入しようとする前に、前の位置から要素を削除しますのでhttp://api.jquery.com/insertafter/

`insertAfter(['#cartDefaultHeading','#checkoutOrderHeading']); 
+0

divをバックグラウンドカラーで取得しました。 #cartDefaultHeadingにはテキストコンテンツがありませんが、#checkoutOrderHeadingはテキストコンテンツを持ちません。 注文をinsertAfter(['#checkoutOrderHeading'、 '#cartDefaultHeading']に切り替えると、出力が変更時に表示されます。したがって、divが両方に設定されていても、テキストコンテンツはinsertAfterコマンドの最後のdivにのみ適用されるように見えます。 –