ブロックにclassを付けたい(JSでの実装) | HOW TO

custom-hookを利用してブロックにclassを追加する

JQueryライブラリとcustom-hookを利用して、任意のブロックにclassを付与するスクリプトです。

ジンドゥーの任意のブロックにclassを追加したいなどを実現する手段です。

実現方法

ヘッダー編集機能を利用して、サイト(または適応させたいページ)の<head></head>にJQueryライブラリとcustom-hookを定義するするスクリプトを追記し、custom-hookを呼び出したいページには文章ブロックなどのhtml編集・ウィジェット/HTMLブロックなどを使います。

実装STEP

利用する機能:管理メニュー > 基本設定 > ヘッダー編集

  1. コードA(JQueryライブラリ)を追加
  2. コードBを追加
  3. 追記したい場所でcustom-hookを指定する
  4. 追加したclassに対してスタイルをつける

#1 コードAを追記

ヘッダー領域へ追記する

  1. <script src="//code.jquery.com/jquery-3.4.1.min.js"></script>

または、JQueryのライブラリをDLされて、独自レイアウト > ファイル からアップロードし利用することも可能です。この記事では独自レイアウト領域の詳細については割愛しますのでご了承ください。

#2 コードBを追記

カラムの中に追記する

  1. <script type="text/javascript">
  2. //<![CDATA[
  3. $(function () {
  4.     // 公開ページで custom-hook を有効にする
  5.     if (window.parent && window.parent === window) {
  6.         $('.custom-hook').each(function () {
  7.             // widgetで書いたhook要素
  8.             var $hook = $(this);
  9.             // hookの親要素 (j-htmlCode) をフックの基準とする
  10.             var $hookParent = $(this).parent();
  11.             var targetPosition = $hook.attr('data-target-position');
  12.             // オリジナルのクラス名を追加したい要素
  13.             var $target;
  14.             // target-positionがnextなら、hookParentの次の要素をtargetにする
  15.             if (targetPosition === 'next') {
  16.                 $target = $hookParent.next();
  17.             }
  18.             // target-positionがparentなら、hookParentの直近の親要素をtargetにする
  19.             else if (targetPosition === 'parent') {
  20.                 $target = $hookParent.parent();
  21.             }
  22.             // target-positionがchildなら、hookParentの次の親要素の子要素をtargetにする
  23.             else if (targetPosition === 'child') {
  24.                 $target = $hookParent.next().children();
  25.             }
  26.             // target-positionがmeなら、hookParentをtargetにする
  27.             else if (targetPosition === 'me') {
  28.                 $target = $hookParent;
  29.             }
  30.             // hookで設定したclass-nameをtargetのクラス名として追加する
  31.             $target.addClass($hook.attr('data-class-name'));
  32.             // target-positionがme以外の時、hook要素自体は何もしないので削除する
  33.             if (targetPosition !== 'me') {
  34.                 $hookParent.remove();
  35.             }
  36.         });
  37.     }
  38. });
  39. //]]>
  40. </script>

#3 custom-hookを呼び出す

呼び出したい要素の中、または前に「ウィジェット/HTML」ブロックを配置し、custom-hookを呼び出し、付与したいclass名と、付与する場所を指定するコードを記載します。


例:このコードを記載すると、このコードを記載した要素の親要素にdata-class-name で指定されたclass名を追加します

  1. <div class="custom-hook" data-class-name="xxxxxxx" data-target-position="parent"></div>
  • next:次の要素に指定したclassを付与する
  • parent:直近の親要素に指定したclassを付与する
  • child:子要素に指定したclassを付与する

例:編集画面で配置したカラムの片方だけに black-card というclassを付与して、任意のカラムの背景に色をつける。

ウィジェット HTML部チームスロックでコードを追加する
表示ページで、追加したコードの親要素に指定したclassが追加されている

#4 classに対してスタイルをつける

後は、付与したclassに対して、任意のCSSをヘッダー編集などから追記するだけ。
任意のブロックにclassを付与し、デザインを適応させることができます。