
class設定が間違っているようです。アドバイスお願い致します。
通常のcssは機能しています。
ソースコード
view-source:http://www.gsdfgsdgs.cfbx.jp/
出力html
<ul class="archive-list"><li class="year current acv_open">2022<ul class="month-archive-list"><li><a href="http://www.gsdfgsdgs.cfbx.jp/2022/6">2022年6月</a>(4)</li><li><a href="http://www.gsdfgsdgs.cfbx.jp/2022/5">2022年5月</a>(6)</li></ul><li class="year current acv_open">2021<ul class="month-archive-list"><li><a href="http://www.gsdfgsdgs.cfbx.jp/2021/7">2021年7月</a>(2)</li></ul></li></ul></div>
//archive.js
jQuery(document).ready(function ($) {
//年月別アーカイブ表示用
$(".archive-list li").click(function () {
//
if ($(this).next(".month-archive-list").is(":visible") || $(this).hasClass("acv_open")) { //既に開いている場所なら
$(".month-archive-list", this).slideUp("fast"); //閉じる
$(this).removeClass("acv_open"); //.acv_open削除
}
else { //閉じている場所なら
$(this).siblings().children(".month-archive-list").slideUp("fast"); //その他リストを閉じる
$(".month-archive-list", this).slideDown("fast"); //開く
$(".year").removeClass("acv_open"); //.acv_open削除
$(this).addClass("acv_open"); //.acv_open付加
}
});
});
//front-page.php
<?php
$sql = "
・・略・・
";
$query = $wpdb->prepare($sql);
$ym_items = $wpdb->get_results($query);
$ym_array = [];
foreach ($ym_items as $item) {
$ym_array[$item->y][$item->m] = $item->c;
}
$this_year = (string) idate('Y'); // 現在の年を、4桁の文字列で取得
$out = '<ul class="archive-list">';
foreach ($ym_array as $y => $y_items) {
if ($y == $this_year) {
$out .= '<li class="year acv_open current">'.$y;
} else { // それ以外の年の場合
$out .= '<li class="year">'.$y;
}
$out .= '<ul class="month-archive-list">';
foreach ($y_items as $m => $c) {
$url = home_url("{$y}/{$m}");
$out .= "<li><a href=\"{$url}\">{$y}年{$m}月</a>({$c})</li>";
}
$out .= '</ul>'; // 閉じる <ul class="month-archive-list">
}
$out .= '</li>'; // 閉じる <li class="year">
$out .= '</ul>'; // 閉じる <ul class="archive-list">
// HTMLの出力
echo $out;
?>
//style.css
ul.archive-list ul{ /* アコーディオン部 */
margin: 5px 0 30px 15px;
}
ul.archive-list li{ /* リセット */
list-style: none;
background: none;
padding: 0;
}
ul.archive-list li p{ /* リセット */
margin: 0;
}
ul.archive-list li p span{ /* アイコン背景 */
display: inline-block;
width: 15px;
height: 15px;
position: relative;
background: #09c;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
margin-right: 5px;
vertical-align: -2px;
}
ul.archive-list li p span:before{ /* アイコン横棒 */
content:'';
height: 1px;
width: 9px;
display: block;
background: #fff;
position: absolute;
top: 7px;
left: 3px;
}
ul.archive-list ul li{ /* アーカイブリスト */
margin-left: 15px;
position: relative;
}
ul.archive-list ul li::after{ /* アーカイブリストマーク */
display: block;
content: '';
position: absolute;
top: .2em;
left: -1em;
width: 6px;
height: 6px;
border-right: 1px solid #666;
border-bottom: 1px solid #666;
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
}
/* 月別アーカイブリストのアイコン設定 */
.month-archive-list > li::before {
font-family: 'fontello';
content: '\e802'; /* > マーク */
margin-right: .5em;
margin-left: 3px;
color: rgba(0,0,0,.54);
}
/* ここから効かない */
/* acv_openクラスをもたないリスト項目の子リスト(month-archive-list)は、デフォルト非表示に */
ul.archive-list > li:not(.acv_open) > ul {
display: none;
}
/* 年別アーカイブリストのアイコン設定 */
.archive-list > li.acv_open::before { /* リストが開かれているとき */
font-family: 'fontello';
content: '\e815'; /* -マーク */
margin-right: .5em;
}
.archive-list > li:not(.acv_open)::before { /* リストが閉じられているとき */
font-family: 'fontello';
content: '\e814'; /* +マーク */
margin-right: .5em;
No.4ベストアンサー
- 回答日時:
No1です。
どうやら、回答を読む気も、理解する気もないみたいなので・・・
質問文に示したままのソースで、スクリプトの最初に
jQuery(document).ready(function ($) {
$('.year:gt(0)').removeClass("acv_open").children('ul').hide(); //←1行追加
とでもしておけば、何とかなるでしょう。
回答ありがとうございます。コードのクラスを変更したところ上手くいきました。
$ym_array = [];
foreach ($ym_items as $item) {
$ym_array[$item->y][$item->m] = $item->c;
}
$out = '<ul class="archive-list">';
foreach ($ym_array as $y => $y_items) {
$out .= '<li class="year">'.$y;
$out .= '<ul class="month-archive-list">';
foreach ($y_items as $m => $c) {
$url = home_url("{$y}/{$m}");
$out .= "<li><a href=\"{$url}\">{$y}年{$m}月</a>({$c})</li>";
}
$out .= '</ul>'; // 閉じる <ul class="month-archive-list">
}
$out .= '</li>'; // 閉じる <li class="year">
$out .= '</ul>'; // 閉じる <ul class="archive-list">
// HTMLの出力
echo $out;
No.3
- 回答日時:
誤: <li class="year current acv_open">2021...
正: <li class="year">2021...
下記のように修正してみたところ閉じたのですが、今度はボタンクリックで1度エラーが出るようになりました。2度目のクリックでは動作します。
"ul.archive-list > li:not(.acv_open) > ul"というコードは作者が何か意図があるように思えます…
/* acv_openクラスをもたないリスト項目の子リスト(month-archive-list)は、デフォルト非表示に */
ul.archive-list > li.acv_open > ul > ul.month-archive-list {
display: none;
}
No.2
- 回答日時:
出力 HTML が
<ul class="archive-list">
<li class="year current acv_open">2022 <ul>...</ul></li>
<li class="year current acv_open">2021 <ul>...</ul></li>
</ul>
なので、
"ul.archive-list > li.acv_open > ul" は有りますが、
"ul.archive-list > li:not(.acv_open) > ul" が無いです。
HTML 構造を見直しましょう。
CSS のセレクタ記述にブレがあります。
質問文:
ul.archive-list > li:not(.acv_open) > ul
No.1 のお礼:
ul.archive-list ul > li:not(.acv_open) > ul /*多分間違い*/
参考)
ページ表示中の HTML 構造や CSS 適用状態を調べる方法
https://developer.mozilla.org/ja/docs/Learn/Comm …
回答ありがとうございます
li:not(.acv_open)というのはCSSで付与するのではないのでしょうか?
もう1点お聞きしたいのですが、jQueryにあまり詳しくない状態で作成しているのですが、この場合PHPとjQueryどちらを修正する必要がありますでしょうか?
No.1
- 回答日時:
こんにちは
すでに回答したはず。
https://oshiete.goo.ne.jp/qa/13045843.html
出力のHTMLを確認しさえすればわかること。
CSSが効かないのではありません。
クラス名が全部「acv_open」になっているだけの話。
回答ありがとうございます。
classがすべてacv_openになっているとはどういうことでしょうか?
下記のコードは機能しているため、jQueryが間違えているかcssに問題が有るように見えます。(.acv_open)は機能しているようなので、ul.archive-list ul > li:not(.acv_open) > ulの書き方に問題があるようですがどこが間違えているのか特定ができていません。
※効かないコード
/* acv_openクラスをもたないリスト項目の子リスト(month-archive-list)は、デフォルト非表示に */
ul.archive-list ul > li:not(.acv_open) > ul {
display: none;
}
_______________________________________________________
※効いているコード
/* 年別アーカイブリストのアイコン設定 */
ul.archive-list > li.acv_open::before { /* リストが開かれているとき */
font-family: 'fontello';
content: '\e815'; /* -マーク */
margin-right: .5em;
}
ul.archive-list > li:not(.acv_open)::before { /* リストが閉じられているとき */
font-family: 'fontello';
content: '\e814'; /* +マーク */
margin-right: .5em;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
composerをインストールしたい...
-
phpの問い合わせフォームを作っ...
-
PHPSpreadsheetによる書き出し...
-
PHPSpreadsheetを使って関数を...
-
php ログイン
-
BASIC認証のフォームをデザイン...
-
$_SESSIONに渡した後はそのまま...
-
PHP MySQLに画像を直接保存
-
PHPからCSVをアップロード後、m...
-
フォームで戻った際に入力済み...
-
PHPで画像の渡しが上手く行きま...
-
marginの値でマイナス値を設定...
-
HTML PHP ラジオボタンのイベント
-
PHPの勉強してます。 配列のと...
-
返信機能のツリー構造の深さを...
-
ゆゆにゃ。
-
PHPでのパスワード制限のセキュ...
-
PHP8を使うと、大量のWarningが...
-
SFTPなどは使わないホームペー...
-
phpでcookieがうまく保存されない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ワードにコピペ、画像が表示さ...
-
<li>タグを使って横並びメニュ...
-
箇条書きで表される点がずれる...
-
style.cssのjQuery条件付きcss...
-
htmlの文字が縦書きになる
-
htmlのolやulなどlistにtitleや...
-
リストマーカーをボックス内に...
-
widthやheightの数値に単位(px...
-
含む含まないという概念自体の...
-
html/cssの、navを2段にする...
-
角丸画像の背景色を透明にした...
-
form input テキストを上下中央...
-
ulタグやliタグの中でbrタグ...
-
個別にリンクの色を変える方法
-
liタグの中に<p>タグやら<dl>を...
-
HTML属性での「""」 「''」違い
-
html の divとtable の役割
-
<div id="container">の使いか...
-
ボタンをセル内一杯に表示させ...
-
<div>と<div>の間の10px程の...
おすすめ情報
1のcssは機能して2のcssが機能しないということは、> ulが認識されていないということだと思います。
ulのクラス設定を修正しても変化はないです。
1,.archive-list > li:not(.acv_open)::before { /* リストが閉じられているとき */
font-family: 'fontello';
content: '\e814'; /* +マーク */
margin-right: .5em;
}
2,/* acv_openクラスをもたないリスト項目の子リスト(month-archive-list)は、デフォルト非表示に */
ul.archive-list > li:not(.acv_open) > ul.month-archive-list {
display: none;
}