Estoy tratando de obtener los hijos de un div, sin embargo, por alguna razón, no funcionará.
Obtengo el div a través del método getElementById y luego, cuando intento obtener los elementos secundarios de ese elemento, no lo reconoce y me arroja un error.
window.onload = function(){ console.log("h") for (i in bookData ){ var current = bookData[i] var currentCodeN = current.codeName var currentHTMLElem = document.getElementById(toString(currentCodeN)) console.log(typeof(currentHTMLElem)) //returns 'object' console.log(typeof(currentHTMLElem.children)); //error console.log(currentHTMLElem.children.length); } }¿Alguna idea de por qué sucede esto? Busqué este problema y configuré un evento para esperar a que se cargara toda la página. todavía no funciona
Error:
Uncaught TypeError: Cannot read properties of null (reading 'children') at window.onload"No estoy usando iFrame
ACTUALIZACIÓN: estaba usando toString en una cadena ya. Lo siento.
Hay algunas cosas que están pasando aquí.
var currentHTMLElem = document.getElementById(toString(currentCodeN)) Esto hace que currentHTMLElem sea null . Volveré a por qué, pero es claramente nulo porque el mensaje de error te dice que lo es.
console.log(typeof(currentHTMLElem)) //returns 'object' Sí, si currentHTMLElem es nulo, typeof devolverá "object" . Así que ahí estás.
No sé qué es bookData , pero estoy seguro de que usar toString es incorrecto. Mira lo que hace toString para varios objetos:
toString(null) -> "[object Undefined]"
toString(12) -> "[object Undefined]"
toString(anythingatall) -> "[object Undefined]"
Eso es porque estás llamando al toString incorrecto. Llamar a toString sin un objeto usará la base Object.prototype.toString con un objeto indefinido. Si lo invoca con un objeto como toString.apply(12) , obtendrá la versión base que solo le indica el tipo ( [Object Number] ). En su lugar, querrá llamar a la versión sobrecargada: currentCodeN.toString() , que llamará a toString para cualquier tipo de currentCodeN . Para una cadena, esto solo devuelve la cadena, para un número devolverá una versión de cadena.
Sin embargo, eso generará un error currentCodeN es nulo o indefinido. No debería necesitar usar toString en absoluto. Supongo que ya es una cadena, así que intente simplemente:
var currentHTMLElem = document.getElementById(current.codeName)o para máxima seguridad:
var currentHTMLElem = document.getElementById(current && current.codeName || '') si eso todavía te da null , entonces el elemento no existe en el DOM.