0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

閲覧したページにチェックを入れるUIを実装したい

Last updated at Posted at 2021-08-23

閲覧したページにチェックを入れるUIを実装したい。

実装方法は3つ
1.Cookie
2.localStorage
3.IndexedDB

IndexedDBは値をオブジェクトで持つことができ、色々できる反面設定に少し手間がかかる。
今回はチェック入れるだけのシンプルなものなので除外した。

CookieとlocalStorageは基本的にはどちらでも良いと思うが少し違いはある。
以下のサイトがわかりやすい。
https://www.granfairs.com/blog/staff/local-storage-01

1.Cookieで実装

HTMLはsetCookie関数の引数だけ違います。
Cookieの期限は適宜設定してください。

index.js

const setCookie = key => {
  document.cookie = `${key}=1;path=/`;
}

const getCookie = () => {
  // ページ名を配列で入れておく 
  const pageList = ['index', 'page1', 'page2'];

  const cookies = document.cookie;
  const navEl = document.querySelectorAll('.navItem');

  //取得したcookieとpagelistを照らし合わせてヒットしたら[browsed!]を入れる
  pageList.forEach((page, index) => {
    if (cookies.indexOf(page) >= 0) {
      navEl[index].insertAdjacentHTML('beforeend', ' [browsed!]')
    }
  });
}

index.html
  <ul id="nav">
    <li><a href="index.html" class="navItem">index</a></li>
    <li><a href="page1.html" class="navItem">page1</a></li>
    <li><a href="page2.html" class="navItem">page2</a></li>
  </ul>
  <script src="index.js"></script>
  <script>
    setCookie('index'); //ページ名を引数に入れておく
    getCookie();
  </script>
page1.html
  <ul id="nav">
    <li><a href="index.html" class="navItem">index</a></li>
    <li><a href="page1.html" class="navItem">page1</a></li>
    <li><a href="page2.html" class="navItem">page2</a></li>
  </ul>
  <script src="index.js"></script>
  <script>
    setCookie('page1'); //ページ名を引数に入れておく
    getCookie();
  </script>
page2.html
  <ul id="nav">
    <li><a href="index.html" class="navItem">index</a></li>
    <li><a href="page1.html" class="navItem">page1</a></li>
    <li><a href="page2.html" class="navItem">page2</a></li>
  </ul>
  <script src="index.js"></script>
  <script>
    setCookie('page2'); //ページ名を引数に入れておく
    getCookie();
  </script>

2.localStorageで実装

HTMLはsetLocalStorage関数の引数だけ違います。
sessionStorageにしたい場合は適宜変更してください。

index.js

const setLocalStorage = key => {
  localStorage.setItem(key, 1);
}

const getLocalStorage = () => {
  // ページ名を配列で入れておく 
  const pageList = ['index', 'page1', 'page2'];

  const navEl = document.querySelectorAll('.navItem');

  //localStorageとpagelistを照らし合わせてヒットしたら[browsed!]を入れる
  pageList.forEach((page, index) => {
    if (localStorage.getItem(page)) {
      navEl[index].insertAdjacentHTML('beforeend', ' [browsed!]')
    }
  });
}


index.html
  <ul id="nav">
    <li><a href="index.html" class="navItem">index</a></li>
    <li><a href="page1.html" class="navItem">page1</a></li>
    <li><a href="page2.html" class="navItem">page2</a></li>
  </ul>
  <script src="index.js"></script>
  <script>
    setLocalStorage('index'); //ページ名を引数に入れておく
    getLocalStorage();
  </script>
page1.html
  <ul id="nav">
    <li><a href="index.html" class="navItem">index</a></li>
    <li><a href="page1.html" class="navItem">page1</a></li>
    <li><a href="page2.html" class="navItem">page2</a></li>
  </ul>
  <script src="index.js"></script>
  <script>
    setLocalStorage('page1'); //ページ名を引数に入れておく
    getLocalStorage();
  </script>
page2.html
  <ul id="nav">
    <li><a href="index.html" class="navItem">index</a></li>
    <li><a href="page1.html" class="navItem">page1</a></li>
    <li><a href="page2.html" class="navItem">page2</a></li>
  </ul>
  <script src="index.js"></script>
  <script>
    setLocalStorage('page2'); //ページ名を引数に入れておく
    getLocalStorage();
  </script>

参考

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?