前提・実現したいこと
実現したいこと:子要素がすべてdisplay noneだったら、親要素を消す
前提:
1.view_timer.jsというJavaScriptを使用してコンテンツのタイマー設定をしています。
設定した開始日時と終了日時を見て、display:noneとdisplay:inlineを自動的にstyle付与しています。
2.親要素はflexで横並びにして、横幅指定してします。打ち消し線
その中に子要素を入れて、複数のコンテンツをタイマー設定で切替表示しています。
3.結論
もし、子要素がすべて、display:noneになったら(=display:inlineがなければ)、親要素のみ横幅指定しているため、余白が残ってしまうため、JavaScriptで制御して、親要素を削除するようにする。
※プログラミング初心者で申し訳ございませんが、どうぞよろしくお願いいたします。
発生している問題・エラーメッセージ
「https://teratail.com/questions/40956」を参考にして、実装してみたのですが、
子要素がすべて、display:noneになったら(=display:inlineがなければ)、
不明なidが親要素に付与されていて、まだ、親要素が残っています。
表示要素がない場合の状態(キャプチャ)
※一番左側が子要素が非表示で、親要素のみが残ってしまっている状態です。
上記キャプチャの一番左側に、以下のスタイルが残ってしまいます。
.keyword_list li{ width: 15%; margin-right: 1.66666%; background: #fdeff2; padding: 0.5%; display: flex; align-items: center; justify-content: center; text-align: center; }
$(".about_sale_main").each(function(index) { if($("section:not([class*='hidden-'])", this).length == 0){ // hidden-を含まないsectionが0個、つまり全てhidden-を含んでいるので見えていない $(this).addClass("hidden-not-display"); } else { $(this).removeClass("hidden-not-display"); } });
該当のソースコード
うまくいっていないHTMLの箇所(不明なIDが付いてしまった「id="sizzle1655950385117"」)
<li class="keyword_item" id="sizzle1655950385117"> <span class="view_timer" data-start-date="2022/6/20 10:00" data-end-date="2022/6/22 10:00" style="display: none;"> <a href="#">#ハッシュタグ</a> </span> </li>
実際に自分で改変してみたJavaScript
//https://teratail.com/questions/40956 $(".keyword_item").each(function(index) { if($("span([style*='inline'])", this).length == 0){ // spanタグにdisplay:inlineが1つもなければ $(this).addClass("hidden-display"); } else { $(this).removeClass("hidden-display"); } });
実際のHTML
<!-- .keyword_list --> <ul class="keyword_list mt10 mb20"> <!-- タイマー設定 1 --> <li class="keyword_item"> **親要素** **子要素** <span class="view_timer" data-start-date="2022/6/20 10:00" data-end-date="2022/6/22 10:00"> <a href="#">#ハッシュタグ</a> </span> </li> <!-- タイマー設定 2 --> <li class="keyword_item"> **親要素** **子要素** <span class="view_timer" data-start-date="2022/6/20 10:00" data-end-date="2022/6/30 10:00"> <a href="#">#ハッシュタグ</a> </span> **子要素** <span class="view_timer" data-start-date="2022/6/30 10:00" data-end-date="2022/7/15 10:00"> <a href="#">#ハッシュタグ2</a> </span> </li> <!-- タイマー設定 3 --> <li class="keyword_item"> **親要素** **子要素** <span class="view_timer" data-start-date="2022/6/20 10:00" data-end-date="2022/6/30 10:00"> <a href="#">#ハッシュ</a> </span> **子要素** <span class="view_timer" data-start-date="2022/6/30 10:00" data-end-date="2022/7/15 10:00"> <a href="#">#ハッシュ2</a> </span> </li> <!-- タイマー設定 4 --> <li class="keyword_item"> **親要素** **子要素** <span class="view_timer" data-start-date="2022/6/20 10:00" data-end-date="2022/6/30 10:00"> <a href="#">#ハッシュタグ#ハッシュタグ#ハッシュ</a> </span> **子要素** <span class="view_timer" data-start-date="2022/6/30 10:00" data-end-date="2022/7/15 10:00"> <a href="#">#ハッシュタグ#ハッシュタグ#ハッシュ2</a> </span> </li> <!-- タイマー設定 5 --> <li class="keyword_item"> **親要素** **子要素** <span class="view_timer" data-start-date="2022/6/20 10:00" data-end-date="2022/6/30 10:00"> <a href="#">#ハッシュタグ</a> </span> **子要素** <span class="view_timer" data-start-date="2022/6/30 10:00" data-end-date="2022/7/15 10:00"> <a href="#">#ハッシュタグ2</a> </span> </li> <!-- タイマー設定 6 --> <li class="keyword_item"> **親要素** **子要素** <span class="view_timer" data-start-date="2022/6/20 10:00" data-end-date="2022/6/30 10:00"> <a href="#"><a href="#">#ハッシュタグ#ハッシュ</a></a> </span> **子要素** <span class="view_timer" data-start-date="2022/6/30 10:00" data-end-date="2022/7/15 10:00"> <a href="#">#ハッシュタグ#ハッシュ2</a> </span> </li> </ul> <!-- /.keyword_list -->
スタイルシート
/* --------------------------------------------------------------------------------------------- KEYWORD --------------------------------------------------------------------------------------------- */ .keyword_list{ width:100%; display: flex; list-style: none; padding: 0; } .keyword_list li{ width: 15%; margin-right: 1.66666%; background: #fdeff2; padding: 0.5%; display: flex; align-items: center; justify-content: center; text-align: center; } .keyword_list li a{ font-weight: 700; } .hidden-display{ display: none; } @media screen and (max-width: 767px) { .keyword_list{ flex-wrap: wrap; } .keyword_list li{ width: 30%; margin-right: 3.33333%; margin-bottom: 15px; } .keyword_list li a{ font-size: 13px; } }
view_timer.js
$(document).ready(function() { $(".view_timer").each(function(index, target) { var startDate = $(this).attr("data-start-date"); var endDate = $(this).attr("data-end-date"); var nowDate = new Date(); if (startDate) { startDate = new Date(startDate); } else { startDate = nowDate; } if (endDate) { endDate = new Date(endDate); } if (startDate <= nowDate && (!endDate || nowDate <= endDate)) { $(this).show(); } else { $(this).hide(); } }); });
何卒、よろしくお願いいたします。

