javascriptだと思ったのでこちらのカテを選びましたが違ったらすみません。
サイトに掲載しているデータを●日経過した時点で消したいのですが方法がわからず、アドバイス頂けないでしょうか。
行いたいことは、例えば<div id="hoge">~</div>といった感じで、指定したID内のコンテンツを、指定した日数経過するとページ上に掲載されないようにしたいです。
ただしこれらは、アクセスするユーザーごとに対応したいので一律●日経過で見えないようにするということではありません。
例えば、掲載期間が3日で指定した場合、Aさんは最初に訪れた日が5日前なので、すでに3日経過しているため見れない。Bさんは、今日初めてアクセスしたので、残り3日間閲覧が可能…、といった感じが希望です。
こういった事は可能でしょうか?もし、実現できるとしたらどのような方法か、具体的なアドバイスを頂けないでしょうか。
調べてみるのですが、経過日数は取得できるようなのですが、指定したものを消すという方法が見つかりません。
お詳しい方いらっしゃいましたら、よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
JavaScript だけで実現する具体的な方法。
お知らせ表示程度ならば、これで十分でしょう。
<style>
.notice .new { font-weight:bold; } /* 注目表示 */
.notice .expiration { display:none; } /* 期限切れ */
</style>
<script>
document.addEventListener('DOMContentLoaded', function(ev){var _=0;
_; function A(a){return Array.prototype.slice.apply(a)}
_; function QQ(s){return A(document.querySelectorAll(s))}
_; var DAY = 1000*60*60*24;
_; var attent = DAY * 1 / 24; // 最初の1時間は注目表示
_; var KEY = 'noticeFirstView';
_; var now = new Date().getTime();
_; var p = localStorage.getItem(KEY);
_; var record = p? JSON.parse(p): {};
_; var neo = {};
_; QQ('.notice *[id][data-days]').forEach(function(e){
_; _; var period = DAY * parseFloat(e.dataset.days);
_; _; var first = record[e.id];
_; _; if (first && now < first+attent) e.classList.add('new');
_; _; if (first && first+period < now) e.classList.add('expiration');
_; _; neo[e.id] = first? first: now; // お知らせを最初見た日時を記録
_; });
_; localStorage.setItem(KEY, JSON.stringify(neo)); // 閲覧記録をブラウザに保存
}, false);
</script>
<ul class=notice>
<li data-days=1 id=hogehoyohoe>1日だけ掲載したいお知らせ
<li data-days=2 id=foobarbazqu>2日だけ掲載したいお知らせ
<li data-days=4.5 id=issyhatrsgt>4日半だけ掲載したいお知らせ
</ul>
Ogre7077様
具体的な回答ありがとうございます、とても分かりやすく書いて頂き感謝申し上げます。
私の説明不足もあり、どの程度の厳格性か等の情報が無く大変失礼いたしました。まさにお知らせ程度、簡易的に実装できれば今回は問題ありません。
回答頂きました他の皆さまもお礼申し上げます。
ありがとうございました!
No.3
- 回答日時:
回答ではないけど気になったことを。
。。Javascriptとあるのでクライアント側だけで実現しようとしているのかな???
あと、見えないことの強さはどの程度なのかな???
(絶対に見せてはいけないのかというか。
例えば、他人の口座の残高とか。)
表示上見えなくても、ページ内Javascriptがユーザや日数に応じて表示制御だけをしている場合、ページソースを見れば古い内容はわかってしまいますね。
(表示制御する内容が増えると、見た目は大したことないのに、ページサイズは大きくなってロードが遅かったり、サーバ負荷が上がったりもあるかも。)
Ajax等で非同期でサーバから取得する作りならそこは回避できるかもしれません。
ただ、取得のクエリーがベタだとそこを変えるだけで古いものや他人のものを知ることができたりしちゃいます。
そうなるとセッション管理になってきて、クライアント側で表示を制御するのではなく、サーバ側で条件に応じて見せるものだけを返す方が自然かもしれません。
No.2
- 回答日時:
こんにちは
簡単に実現するのなら、以下のような方法の応用でできると思います。
http://www.pori2.net/js/cookie/1.html
http://www.red.oit-net.jp/tatsuya/java/cookie.htm
http://magnets.jp/web_design/4897/
経過日時の例がすぐには見つからなかったので、上記の例は「訪問回数」の表示になっています。
考え方はほぼ同じで、訪問回数を算出(記録)する代わりに、最初の訪問日を記録しておいて経過日数を算出して判定するという感じですね。
一律ではなく、ユーザーごとへの対応が可能な方法の一例といえます。
スクリプトで日時を参照する際に通常はクライアントの時刻設定を利用しますが、実は、クライアントの設定が正しくされているという保証はありません。
とはいうものの、経過日数を見たいだけなので、設定がずれていても経過時間(=差分)なので正しく測れるでしょう。
この方法の欠点としては、記録に利用している「クッキー」の機能はユーザー側でON/OFFが可能ですし、そもそもjavascriptの実行もユーザ側でOFFにできますので、そのような場合は機能しないということです。
>経過日数は取得できるようなのですが、指定したものを消すという方法が見つかりません。
要素の表示/非表示はstyle属性のdisplay:block/noneを切り替えたり、visibility:visible/hiddenを切り替えたりで実現できます。
具体的な方法は以下を参照してみてください。
http://allabout.co.jp/gm/gc/23973/
http://www.pori2.net/js/DOM/7.html
No.1
- 回答日時:
基本的にはログイン型のサイトにしてDBなどでユーザー情報を管理しないと
正確には処理できません。
ただjavascriptで簡易的にやる場合には
・初回アクセス日時
・前回アクセス日時
の2つくらいをcookieとして保存しておけば、それら日時と
現時点の日時を比較して、表示を変えることは可能です。
cookieの管理はjavascriptで1から書いてもいいですが
jQueryなどで処理するほうが楽かも
なお、javascriptやcookieはすべての環境で使えるわけではありません
きちんとやりたいのであればDBを検討ください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
ジェネレーターの作り方
-
ASP.NETのコントロールの値をJa...
-
なぜmatchメソッドがエラーにな...
-
html javascript リンク先アド...
-
毎日日付の変わるタイミングを...
-
canvas上で画像を移動する方法...
-
GASでundefinedエラーが出ます
-
フォームで電話番号の判定を行...
-
C#OpenCv V4にのエラーに関する...
-
JavaScriptでテーブル内?に矢...
-
javascriptでiframeのURL変更は?
-
setTimeoutによる繰り返しが途...
-
JavaScriptを使って毎日決まっ...
-
指定日数経過でHTML上のデータ...
-
【javascript】正規表現で括弧...
-
javascriptで同文字の出現回数...
-
javaScript textareaの一行あた...
-
特定のclassを表示、非表示にする
-
ホームページの最終更新日を他...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
ジェネレーターの作り方
-
GASでundefinedエラーが出ます
-
ASP.NETのコントロールの値をJa...
-
C#で、ContextMenuStripに動的...
-
翌月を取得するGASが分かりません
-
gas スプレッドシートがアクテ...
-
ASP.NET MVCでObjectをjsに渡す
-
シンプルなweb版スタンプラリー...
-
ローカルにあるファイルを検索...
-
なぜmatchメソッドがエラーにな...
-
VSCODE[Python]の設定について
-
1日1回だけ引けるjavascriptお...
-
javascriptでiframeのURL変更は?
-
html javascript リンク先アド...
-
lengthが読めない理由が分からない
-
googleスプレッドシートのApps ...
-
【javascript】正規表現で括弧...
-
HTMLにWSHを組み込む
おすすめ情報