Contact Info

  • aniuma OÜ Harju maakond, Tallinn, Lasnamäe linnaosa, Sepapaja tn 6, 15551

JavaScript (jQuery) で特定のドメインのURLにパラメーターを付与する

JavaScript を使って自サイトのドメインや「/ (スラッシュ)」から始まる相対パスの最後にパラメーターを付与する方法について、実装時に調べたことや方法などをまとめます。 今回は WordPress のテーマに実装し jQuery が組み込まれているので、jQuery を利用している前提で進めています。そのため jQuery(function ($) { 処理 } といった書き方をしています。
jQuery(function ($) {
  $(function () {
    // anchorsにaタグを配列ですべて格納
    const anchors = document.getElementsByTagName("a");
    // 条件判定用のURLを取得
    const matchStr = document.domain;

    for (let i = 0; i < anchors.length; i++) {
      // アンカータグを変数に格納
      const linkElement = anchors[i];
      // hrefの中身を変数にとりだす
      let linkUri = linkElement.getAttribute('href');
      // 空じゃなければ次へ
      if (linkUri) {
        // 条件判定用のURLを含んでる、もしくはスラッシュで始まっていれば
        if (linkUri.match(matchStr) || linkUri.startsWith('/')) {
          // 末尾にスラッシュがあれば削除
          linkUri = linkUri.replace(/\/$/, '');
          // パラメータを付与して配列に戻す
          anchors[i].href = linkUri + "?from_app=true";
        }
      }
    }
  });
});
WordPress のテーマに実装する場合はこのままペタッとはればok。

参考記事

http://cly7796.net/wp/javascript/location-url/
URLを変えたりパラメータ・ハッシュを追加する方法
https://stackoverflow.com/questions/5999118/how-can-i-add-or-update-a-query-string-parameter
JavaScriptを使ってパラメーターを付与について
https://stackoverflow.com/questions/9075540/how-to-create-conditional-hyperlink-in-html
条件付きでリンクの作り方について
https://www.tam-tam.co.jp/tipsnote/javascript/post9911.html
JSのパラメーターやハッシュの取り回しについて詳しく書いてある

特定の小要素がある親要素にCSSをあてる方法

WordPressなどのCMSを利用したウェブサイトを運用していると「この要素を持った親要素のマージンをなくしたい」などの状況にでくわすことが多々あります。対応策をいくつか紹介します。
<p>
    <span>a</span>
</p>
<p>
    <span>o</span>
</p>
<p>
    <span>e</span>
</p>
<p>
    <span>u</span>
</p>
<p>
    aoeui
</p>
<p>
    <span>i</span>
</p>
<p>
    aoeui
</p>
このようにp要素が続く場合と単体の場合でマージンを変えたい場合、なおかつCMSの仕様に依存するため特定の小要素を持つ親要素にクラスを指定できない時の対処方法です。

対応方法

CSS4で:has (擬似クラス)を使う

CSS3では特定の小要素がある親要素にCSSをあてる方法がないらしく、CSS3の次にくるであろうCSS4で実装予定の機能 :has (擬似クラス) を利用することで実装が可能となります。
https://developer.mozilla.org/ja/docs/Web/CSS/:has
:has()の説明や各ブラウザの対応状況
しかし前述の記事でも確認できるとおり、現状ではどのブラウザでも対応できないためしばらくは別の方法を模索するしかありません。

JavaScriptで:has(メソッド) を使う

CSSでは対応できませんがjQueryの:hasメソッドを活用することで、特定のクラスを付与し上書きすることは可能です。
<script src="https://code.jquery.com/jquery-3.4.1.slim.js" integrity="sha256-BTlTdQO9/fascB1drekrDVkaKd9PkwBymMlHOiG+qLI=" crossorigin="anonymous"></script>
<script type="text/javascript">
$(function() {
    $("p:has(span)").addClass("parent");
});
</script>

まとめ

CSS4がやってきて:has (擬似クラス) が利用できるまではjQueryの:hasメソッドを利用して特定の要素にクラスを付与するとよいでしょう。 他に良い方法があればコメントなどで教えていただけると嬉しいです!

参考URL

https://web-diy.jp/2017/03/170327_01/
https://www.webdlab.com/labs/jquery-css/