[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
質問
を使わずに要素の存在をテストするにはどうしたらよいでしょうか?
getElementById
メソッドを使うことができますか?
を設定しました。 ライブデモ を参考にしてください。また、ここにもコードを印刷しておきます。
<!DOCTYPE html>
<html>
<head>
<script>
var getRandomID = function (size) {
var str = "",
i = 0,
chars = "0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";
while (i < size) {
str += chars.substr(Math.floor(Math.random() * 62), 1);
i++;
}
return str;
},
isNull = function (element) {
var randomID = getRandomID(12),
savedID = (element.id)? element.id : null;
element.id = randomID;
var foundElm = document.getElementById(randomID);
element.removeAttribute('id');
if (savedID !== null) {
element.id = savedID;
}
return (foundElm) ? false : true;
};
window.onload = function () {
var image = document.getElementById("demo");
console.log('undefined', (typeof image === 'undefined') ? true : false); // false
console.log('null', (image === null) ? true : false); // false
console.log('find-by-id', isNull(image)); // false
image.parentNode.removeChild(image);
console.log('undefined', (typeof image === 'undefined') ? true : false); // false ~ should be true?
console.log('null', (image === null) ? true : false); // false ~ should be true?
console.log('find-by-id', isNull(image)); // true ~ correct but there must be a better way than this?
};
</script>
</head>
<body>
<div id="demo"></div>
</body>
</html>
基本的に上記のコードは、ある要素が変数に格納され、その後DOMから削除される様子を示しています。要素が DOM から削除されても、変数には最初に宣言されたときの要素が保持されています。言い換えれば、それは要素自体へのライブリファレンスではなく、レプリカなのです。その結果、この変数の値(要素)が存在するかどうかをチェックすると、予期しない結果が得られることになります。
は、その
isNull
関数は、変数から要素の存在をチェックする試みで、それはうまくいくのですが、同じ結果を達成する簡単な方法があれば知りたいのです。
追記:JavaScriptの変数がなぜこのような挙動をするのかにも興味があるのですが、もしこのテーマに関する良い記事をご存知の方がいらっしゃいましたら教えてください。
どのように解決するのですか?
このページには、ある要素が「(1)」と「(2)」に分かれるかどうかを知りたい人がいるようです。 存在する (元の質問と少し違いますが)。
それは、ブラウザの選択メソッドのどれかを使って、そのメソッドに 真実味のある の値を設定します(一般的に)。
例えば、私の要素に
id
の
"find-me"
var elementExists = document.getElementById("find-me");
null
!!
document
{を使用します。
{{コード
- {{コード
これらのメソッドの中には
querySelector()
を使用するので、必ずその
querySelectorAll()
プロパティがあります。
getElementsByClassName()
はオブジェクトであり、したがって
真実性
.
ある要素が可視DOMの一部として存在するかどうかを実際に判断する場合(最初に質問されたような場合)。
Csuwldcatは、独自に開発するよりも良い解決策を提供しています。
(この回答が含んでいたように)。つまり
は
getElementsByName()
メソッドを DOM 要素に適用します。
こんな風に使えるんだ...。
NodeList
関連
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptで変数が存在するか(定義されているか/初期化されているか)をチェックする
-
[解決済み] どのDOM要素にフォーカスがあるかを調べるには?
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 Uncaught TypeError: data.push is not a function
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み】JavaScriptのisset()に相当するもの
-
[解決済み】JavaScriptのinnerHTMLで要素が更新されない
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない
-
[解決済み】module.exports "モジュールが定義されていません"