簡體   English   中英

無法從getElementsByClassName訪問HTMLCollection中的元素

[英]Unable to access elements in HTMLCollection from getElementsByClassName

我想從HTMLCollection中獲取一個元素。 document.getElementsByClassName的返回正是我所期待的,但是當我嘗試訪問它的任何屬性時,它看起來就像什么都沒有。 這是我的代碼(此代碼在.js文件中運行,我src到我的index.html):

document.addEventListener('DOMContentLoaded', function () {
    var code = document.getElementsByClassName('CodeMirror-code');
    console.log(code);
    console.log(code[0]); //undefined
    console.log(code.length); //0
}

這是控制台日志:

HTMLCollection(1)
   0: div.CodeMirror-code        //this is the div I want to access
   length: 1
   __proto__: HTMLCollection
undefined
0

另外,如果我進入控制台:

var code = document.getElementsByClassName('CodeMirror-code');
code[0]

我得到了回報:

<div class="CodeMirror-code">...</div>

這正是我正在尋找的,但這不是我在腳本中得到的結果。

在屏幕上呈現元素之前,您可能正在執行此代碼。 這就是為什么當你在控制台中執行它時它的工作原理。

這有兩個選擇:

CodeMirror增加了它的各種DOM元素的后DOM CodeMirror()調用構造函數或之后CodeMirror.fromTextArea()被調用。

因此,您不能簡單地等待各種DOM就緒事件,以便找到您正在尋找的元素。 您可以向構造函數傳遞一個函數,然后您可以手動將編輯器添加到DOM中,然后進行搜索。 或者設置自定義CodeMirror事件偵聽器。

CodeMirror初始化鈎子

CodeMirror.defineInitHook(function(cmInstance){
  var codeDiv = document.querySelector('.CodeMirror-code');
  console.log(codeDiv);
});
var myCodeMirror = CodeMirror(document.body);

CodeMirror手動添加

var myCodeMirror = CodeMirror(function(editor){
  //add the editor to the DOM
  document.body.appendChild(editor);

  var codeDiv = document.querySelector('.CodeMirror-code');
  //either of these will work
  var codeDiv = editor.querySelector('.CodeMirror-code');

  console.log(codeDiv);
});

演示

 CodeMirror.defineInitHook(function(cmInstance){ DoWork( document.querySelector('.CodeMirror-code') ); }); var myCodeMirror = CodeMirror(document.body); function DoWork(codeDiv){ console.log(codeDiv); } 
 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.38.0/codemirror.min.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.38.0/codemirror.min.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM