Document.getElementById does not find element manually inserted in the DOM

Asked

Viewed 468 times

1

Hello, I’m having a hard time getting an element through the id of a Class with document.getElementById(id) of DOM using Javascript

and I have a panel style in css

#painel {
    text-align: center;
    position: absolute;
    margin: 0 auto;
    background-color: white;
    width: 100%;
}

Objects that can be placed on HTML pages (implements all aspects of DOM).

function Visualizavel(etiqueta, id) {
    if (etiqueta) {
        //aqui funciona perfeitamente, criando a tag table
        this.visualizacao = document.createElement(etiqueta);
    }
    if (id) {
        //pretendo obter "div.id=painel", mas não chega aqui
        this.apresentar(document.getElementById(id));
    }
}

function to Place the display in the HTML element of the page

Visualizavel.prototype.apresentar = function (elemento) {
    //Elimina, eventuais, filhos do elemento HTML da página
    while (elemento.hasChildNodes()) {
        elemento.removeChild(elemento.lastChild);
    }
    //Coloca a visualização no elemento HTML da página
    if (this.visualizacao) {
        elemento.appendChild(this.visualizacao);
    }
};

panel class tag table and a id painel

function Painel(id) {
  //filho da classe visualizavel
  Visualizavel.call(this, "table", id);
  //id = painel
  this.id = id;
  //criar a tabela
  var tbody = document.createElement("tbody");
  var tr, td; 
  //linhas
  for (var i = 0; i < 10; i++) {
    tr = document.createElement("tr");
    //colunas
    for (var j = 0; j < 10; j++) {
      td = document.createElement("td");
      tr.appendChild(td);
    }
    tbody.appendChild(tr);
  }
  this.visualizacao.appendChild(tbody);

  //função para carregar pagina do painel
  this.carregarPainel = function() {

    var div = document.createElement('div');
    //mesmo que <div id="painel">Painel</div> em html
    div.id = this.id;
   //mesmo que <body><div id="painel">Painel</div><body> em html
    document.body.appendChild(div);
  };
}
Painel.prototype = Object.create(Visualizavel.prototype);
Painel.prototype.constructor = Painel;

my doubt is that when I create a new panel instance

var painel = new Painel(painel);
alert("ID: "+painel.id); // irá mostrar "ID: painel"

and as being extended from classe Visualizavel, only checks the id until the use of if and not enough to Visualizavel.prototype.apresentar to tabela because the id was not found

if (id) {
   alert("Mesmo ID: " + id); // irá mostrar "Mesmo ID: painel"
   //não chega aqui 
   this.apresentar(document.getElementById(id));
   //porque não reconhece 
   // nenhum element com id=painel mas,
   // tenho div.id=this.id, dentro da body
   //em carregar pagina painel
 }

and then when I intend to, call the Load Panel,

painel.carregarPainel();

nothing appears

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.