共通のクラスtarget
の名前の要素が「使用可能」であるかどうかを調べる必要があります。これらの要素のどれも物理的にDOMに存在しません。これらの項目は、ページが完全にロードされた後に追加されました。バニラJavaScriptに動的に追加されたすべてのセレクタをクラス名で取得するにはどうすればよいですか?
var targets = document.getElementsByClassName('target);
以下
I console.log(targets);
は私が[]
を取得します。私はそれらの角括弧をクリックすると
target
項目が表示されているようだが、彼らに次のメッセージがあります:ログインしたときに左の
オブジェクトの値がスナップショットを作成して、ちょうど今 を評価した値を下回ります。
だから私は、DOMはまだtarget
要素が取り込まれていないときに私はconsole.log
をしたことを想定しています。どのように動的に追加された要素に関する情報を取得するのですか?
EDIT:
私はHSHの機能をチェックし
document.body.addEventListener('DOMSubtreeModified', function(event) {
var targets = document.getElementsByClassName('target');
console.log(targets.length);
/**
* If I have 40 target elements, this will be called 40 times :/ showing first bunch of zeros then finally number will reach to 40
*/
});
/**
* So this would be ideally (called only once) but this always shows empty array and 0
*/
document.addEventListener('DOMContentLoaded', function(event) {
var targets = document.getElementsByClassName('marker');
console.log(targets); // always shows []
console.log(targets.length); // always shows 0
//while I can play with those target selectors in Chrome Dev Tools
});
PS。いいえjQueryしてください。
スクリプトを最後のものとして '
'タグに含めます。そうすることで、スクリプトを実行する前にDomがレンダリングします。 – jh3y@ jh3y - これは動的に追加されたものを捕まえません。(これらを追加するスクリプトは*と*は非同期ではありません)...質問が尋ねていることです。 – Quentin
まさに! @クエンティンは正しい!それがポイントです。動的に追加されたものをキャッチする。 – slick