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?

【JS】document.getElementById('id名') と $('#id名')が違う

Posted at

背景
下記みたいなコードがある。

例1.javascript
const resetBtn = document.getElementById('reset-btn');

if (resetBtn) {  //要素が存在する場合
     //何かの操作
} else {  //要素が存在しない場合
    filter_setting();
}

const resetBtn = document.getElementById('reset-btn');const resetBtn = $('#reset-btn');に変えると、下記となる。

例2.javascript
const resetBtn = $('#reset-btn');

if (resetBtn) {  //要素が存在する場合
    //何かの操作
} else {  //要素が存在しない場合
    filter_setting();
}

問題
resetBtnが「存在していない」のに、filter_setting();が実行されない。

原因
例1の場合、resetBtnには、id="reset-btn"のDOM要素そのものが代入される。
例2の場合、resetBtnには、id="reset-btn"の要素をラップしたjQueryオブジェクトが代入される。
(DOM要素そのものを取り出すにはresetBtn[0]resetBtn.get(0)を使う。)

JavaScriptのif (resetBtn)チェックは、jQuery オブジェクトが常に真と評価されるため、filter_setting(); の条件が満たされない。

解決策
jQuery を使って、要素が存在するかどうかをチェックするには .length を確認する。

const resetBtn = $('#reset-btn'); 

if (resetBtn.length > 0) {  //要素が存在する場合
     //何かの操作
} else {  //要素が存在しない場合
    filter_setting();
}
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?