イベントのタイマーを表示する必要があるアプリがあり、イベントが終了すると、そのタイマー (それを含むブロック) が非表示になります。タイマー要素には動的ID(クラス名とともにイベントのID番号がある)があるため、親div要素(そのブロック)のCSSを設定しました。
これは JavaScript コードです:
function GetCount(deal_year,deal_month,deal_date,deal_box)
{
dateFuture = new Date(deal_year,deal_month,deal_date,00,00,00);
// alert(dateFuture); return false;
dateNow = new Date(); //grab current date
//alert(dateNow);
span = dateFuture.getTime() - dateNow.getTime(); //calc milliseconds between dates
delete dateNow;
// if date has passed
if(span <= 0){
x=document.getElementById("dealbox");
x.parentNode.getAttributeNode("style").value="display:none";
}
else { // date is still good
// convert from milliseconds to hr/m/s...
// and save them in diff variable(code is long so avoided that)
document.getElementById(deal_box).innerHTML="<span>"+out+"
</span><br/><strong>days : hours : minutes : seconds</strong>";
setTimeout("GetCount('"+deal_year+"','"+deal_month
+"','"+deal_date+"','"+deal_box+"')", 1000);
回答これはphpコードです
if(strtotime("now") < strtotime($end_date)) { ?>
<div class ="timer_box" id="timer" style="float:right; display: block;" >
<b><div id="deal_box<?php echo $id; ?>"></div></b>
</div>
<script type="text/javascript">
GetCount(<?php echo $timer_array[0]; ?>,<?php echo $timer_array[1]-1; ?>,<?php
echo $timer_array[2]; ?>,'<?php echo 'deal_box'.$id; ?>','<?php echo 'timer'; ?>');
</script> <?php } ?>
関数に渡されたDOM要素のparentNodeアクセスを使用して、親ブロックを非表示にしようとしました。しかし、うまくいきませんでした。関数が要素を介して親の場合にアクセスできないと思われます。私はあらゆることを試しましたが、助けにはなりませんでした。要素のクラス名をjavascriptで変更する回避策を試しましたが、まだ何かが足りないので、もっと良い方法があると思います。