実現したいこと
カスタムデータ属性(data-*)の値に、下記のような配列を使用しております。
<article data-post='["20180212","publish","admin"]'>...</article>
ボタンを押した際、そのボタンの data-trigger
の値と、各<article>のうち data-post
の3番目の値とが一致している<article>のみに絞り込んで表示したいです。
./index.html
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>Popular post</title> 6</head> 7<body> 8 9 <h1>Popular post</h1> 10 11 <button data-trigger='admin'>管理人</button> 12 <button data-trigger='k_kaneda'>兼田</button> 13 14 <article data-post='["20180222","publish","k_kaneda"]'> 15 <h2>投稿タイトルが入ります。ダミーテキスト</h2> 16 <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur pariatur, laboriosam commodi placeat temporibus aperiam.</p> 17 <a href="">続きを読む</a> 18 </article> 19 20 <article data-post='["20180212","publish","admin"]'> 21 <h2>投稿タイトルが入ります。ダミーテキスト</h2> 22 <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur pariatur, laboriosam commodi placeat temporibus aperiam.</p> 23 <a href="">続きを読む</a> 24 </article> 25 26 <article data-post='["20160308","publish","nonchan"]'> 27 <h2>投稿タイトルが入ります。ダミーテキスト</h2> 28 <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur pariatur, laboriosam commodi placeat temporibus aperiam.</p> 29 <a href="">続きを読む</a> 30 </article> 31 32 <article data-post='["20171106","publish","admin"]'> 33 <h2>投稿タイトルが入ります。ダミーテキスト</h2> 34 <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur pariatur, laboriosam commodi placeat temporibus aperiam.</p> 35 <a href="">続きを読む</a> 36 </article> 37 38 <article data-post='["20180422","publish","admin"]'> 39 <h2>投稿タイトルが入ります。ダミーテキスト</h2> 40 <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur pariatur, laboriosam commodi placeat temporibus aperiam.</p> 41 <a href="">続きを読む</a> 42 </article> 43 44 <article data-post='["20170424","publish","nonchan"]'> 45 <h2>投稿タイトルが入ります。ダミーテキスト</h2> 46 <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur pariatur, laboriosam commodi placeat temporibus aperiam.</p> 47 <a href="">続きを読む</a> 48 </article> 49 50 <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> 51 <script type="text/javascript" src="./app.js"></script> 52 53</body> 54</html>
./app.js
js
1$(document).on('click', '[data-trigger]', function() { 2 let targetValue = $(this).data('trigger'); 3 console.log(targetValue); // <= 押されたボタンの値は取れていました 4 let post = '[data-post]'; 5 let target = $(post).data('post')[2].targetValue; // <= ここがうまく行っていません 6 7 // 押されたタブへのクラス付与 8 $('[data-trigger]').removeClass('js-active'); 9 $(this).addClass('js-active'); 10 11 // タブで絞り込み 12 $(post).hide() 13 $(target).show(); 14});
let target = $(post).data('post')[2].targetValue;
の記述が間違っているためにうまく動作しない様なのですが、試したこととしてそのまま載せております。
押されたボタンの値を3番目に持っている要素を target
に入れられれば動作する見込みなのですが…
ご助力いただけますと幸いです。
補足 : 属性値を配列にしている理由
これまで下記のように複数の data-*
属性を指定していました。
data-postDate
: 日付の絞り込みのためdata-postStatus
: 公開前の記事チェックのため
今回新たに、投稿者による絞り込み機能を追加することが決定したのですが単純に data-*
属性を追加すると冗長になってしまうことや、今後、他のページでも属性値を取得して何かしらの処理を加えるといった改修案があるため、一つの data-*
属性にまとめられないかという意見のもと、試している次第です。
そのため、要件が満たせるのであれば下記のように配列ではなくオブジェクトの形式でも構いません。
data-post='{"date":"20180212","status":"publish","author":"admin"}'
ただしこの場合、記述量が長くなるため、できれば配列で実現したいと考えております。
回答1件
あなたの回答
tips
プレビュー