忍者ブログ

素人翻訳

適当に翻訳する。

該当 ID が存在するのにUncaught TypeError: can't…

html文書の中に間違いなく id="notification_btn" を持つボタンが存在するのに、下記のコードがエラーになる。

...
...
const btn = document.querySelector("#notification_btn");
btn.addEventListener("click", notification);
...
...

結果、

Uncaught TypeError: can't access property "addEventListener", btn is null
...
...

<head>の中にあったjavascript コードを<body>の中のボタン(id="notification_btn")より後ろの位置に移して解決。

<body>の中であっても、ボタンのタグより前だと上と同じエラーが出る。

javascript の addEventListener() メソッドは、同メソッドの対象となる DOM 要素の宣言より後でないといけないらしい。

body を閉じるタグの直前に<script>を置くと良いとか。

PR

プログラムを読みやすくするために同一のファイルを2回走査することにした。

あるディレクトリ下にある全てのファイルに対して特定文字列の検索と置換を行い、置換が行われたファイルの名前だけを記録したいと考えた。
文字列置換が一切行われなかったファイルの名前は記録しないことにした。

そして、できれば同じファイルを2度走査したくない。

例えば、次の bash スクリプトの場合、「ファイル名」のファイルを2回走査している。(grepとsed)

grep -q "検索文字列" "ファイル名"
if [ $? -eq 0 ]; then
  echo "ファイル名" >> output.txt
  sed -i s/検索文字列/置換文字列/g "ファイル名"
fi

sed の戻り値を適切に設定してそれを確認することによって、1回の走査で目的を達成したかった。

いろいろと調べたところ、実際に sed で上記のことを行うのは可能であった。

sed のパターンスペースとホールドスペースを駆使して、置換が行われたか(検索文字列が存在したかどうか)を確認し、その結果によって返り値を変更するという方法である。

参考URL1:Return value of sed for no match

参考URL2:置換ができない/複数ある場合に sed の終了コード0以外にする

しかし、この方法だと、時間が経ってからコマンドを見返した時、処理内容を理解するまでに少し時間がかかってしまう。(自分の場合。)

そのため、最初に挙げた grep と sed で2回ファイルを走査するやり方で行くことにした。

令和のパソコンならテキストファイルを2回読んでもそれほど問題にならないと考えた。

カレンダー

02 2026/03 04
S M T W T F S
1 2 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

最新コメント

[07/08 NONAME]
[07/08 NONAME]
[09/07 NONAME]
[08/18 NONAME]
[05/18 NONAME]

最新記事

(03/03)
(02/20)
(02/08)
(02/02)
(02/02)
(11/26)
(11/25)
(07/01)
(01/10)
(01/03)
(12/20)
(12/08)
(11/20)
(10/30)
(10/24)
(09/20)
(09/16)
(09/11)
(09/03)
(09/02)
(08/27)
(08/17)
(07/31)
(07/30)
(07/19)

ブログ内検索

広告

バーコード

広告