JavaScriptでリンク要素を取得する

以前に一覧表上からリンク設定を消去したいと質問させていただきました。

 

その際にJavaScriptにて対象となる「リンク要素」を取得し、

それらすべてのhref属性を削除する。
もしくは、それら全てのonclickイベントでevent.preventDefault()メソッドを実行

という回答をいただき調べていたのですが、

 

そもそもの「リンク要素」を取得方法が解りませんでした。

 

リンク要素を確認する方法をご教授いただけないでしょうか?

 

後藤 耕一さん

前回の質問にお答えできておらず大変申し訳ありません。

一覧上のフィールドの要素すべてを取得するのであれば kitnone.app.getFieldElements(“フィールドコード”)を実行すると、当該のフィールドのHTML要素の配列が取得できます。

その要素の中のリンク要素を取得するのであればfor文などで配列の中身を取得し(fieldElementという変数に代入するとして)fieldElementsByTagName(“a”)を実行すればフィールド要素の内部すべてのリンク要素が取得できるかと思います。

こちらを利用すればonclickイベントでもhref属性を削除でもどちらでもリンクを消去できると思います。

また、前回の質問にこちらで答えさせていただきますが、要素を確認する方法はブラウザの開発者ツールで直接要素を見る方法などもありますが、最終的にはJavaScriptで取得・操作する必要があります。
ページ共通の要素を確認するのもブラウザ開発者ツールで行うのが便利だと思います。

瀧ヶ平様

お世話になっております。

ご回答ありがとうございました。

 

下記のJavaScriptで「fieldElement 」を取得(画面表示)できることが確認できました。

(function() {
    “use strict”;

    kintone.events.on(‘app.record.index.show’, function(event) {
        window.alert(‘表示’);
        var fieldElement = kintone.app.getFieldElements(‘LU1_Year’);    //
       
        console.log(fieldElement);
       
    });

})();

 

方法としては、この方法で一項目ずつ取得して行くことになるのでしょうか?

 

また、それらすべてのhref属性を削除する。
もしくは、それら全てのonclickイベントでevent.preventDefault()メソッドを実行 する方法ですが、

何かサンプルとなるようなものはありますでしょうか?

 

合わせてご教授いただければと思います。

 よろしくお願いします。

後藤 耕一さん

他の投稿でもたびたび言われていますが、こちらはサンプルコードを求める場所ではないので再度手順を述べさせてもらいます。
手順を読んでコードを組んでみて、それでも難しければもう一度書き途中のコードなどと一緒にご質問ください

var fieldElements = kintone.app.getFieldElements(“フィールドコード”);

でfieldElementsにはフィールド要素の配列が入るので、こちらをfor文などを用いて配列の中身を一つ一つ繰り返し処理します。このときに配列の中身をfieldElementという変数に入れ、

var linkElements = fieldElement.getElementsByTagName(“a”);

とすれば、linkElementsにはリンク要素の配列が入るので、こちらもfor文などで中身を一つ一つ繰り返し処理します。

このとき、event.preventDefault()を使う場合はリンク先でイベント処理が書かれているような形で

配列の中身をlinkElementとすると

linkElement.addEventListener(“click”, function(event) {event.preventDefault();});

というような形で中でevent.preventDefault()を実行するイベントリスナを登録すればできます。

href属性を削除するのであればelement.removeAttributeメソッドを使えばできます.

 

 

瀧ヶ平様

 

ご回答いただいた手順を元にコードを組み込んでみました。

一覧を表示する際に指定したフィールドコードのhref属性を削除するJavaScriptを作成したのですが、

 

削除時に【Uncaught TypeError: linkElements.removeAttribute is not a function】のエラーが出て処理に失敗しております。

 

 

 

partとlinkElementsには対象のデータはセットされているようでした。

 

記述方法に問題がありますでしょうか?

 

 

 

なおこの手段がうまくいけば、href属性を削除したいフィールドコード分ロジックを回すことで、対応は出来るかと思われます。

 

 

 

(function() {

 

    ‘use strict’;

 

 

 

    kintone.events.on(‘app.record.index.show’, function(event) {

 

        if (!event.size) {

 

            return;

 

        }

 

// フィールドコードの設定

 

        var records = event.records;

 

        var recordDT = kintone.app.getFieldElements(‘フィールドコード名’);

 

 

 

        for (var i = 0; i < records.length; i++) {

 

 

 

            // DOM要素の取得

 

            var part = recordDT[i];

 

            var linkElements = part.getElementsByTagName(“a”);

 

 

 

            // 属性の削除

 

            linkElements.removeAttribute(“href”);

 

 

 

        }

 

    });

 

})();

 

 

 

よろしくお願いします。

 

linkElementsは要素の配列なのでこちらに対してもfor文で各要素に対する処理を行わなければいけませんね、こちらを修正すればおそらく動くと思います。