4
respostas

Inserção de elemento "div" dentro de elemento "td"

Pessoal, estou tentando usar uma progressbar do bootstrap para exibição da porcentagem da minha td. Porém quando eu tento capturar a td.info-progresso e fazer um appendChild nela com 2 div's (uma, após outra no seu interior). O código não retorna erro no console mas não faz a adição dos elementos.

Alguém consegue identificar o que eu tenho feito de errado?

Segue meu HTML base:

 <tr class="series">
      <td scope="row" class="uppercase text-center info-id">1</td>
        <td scope="row" class="uppercase text-center info-nome">DARK</td>
        <td scope="row" class="uppercase text-center info-temp">3</td>
         <td scope="row" class="uppercase text-center info-total-ep">26</td>
         <td scope="row" class="uppercase text-center info-eps">18</td>
         <td scope="row" class="uppercase text-center info-progresso">
                  <div class="progress" >
                       <div class="progress-bar bg-success text-center" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
                  </div>
</td>
      </tr>

Aqui está o JS que deveria fazer a inserção:

function createTr(serie){

    var serieTr = document.createElement('tr');
    serieTr.classList.add('series');

    var idTd = document.createElement('td');
    idTd.classList.add('uppercase', 'text-center', 'info-id');

    var infoProgresso = document.querySelector('.info-progresso');

    var progressBar = document.createElement('div');
    progressBar.classList.add('progress');

    infoProgresso.appendChild(progressBar);

    var progressResult = document.createElement('div');
    progressResult.classList.add('progress-bar', 'bg-success', 'text-center');

    progressBar.appendChild(progressResult);



    idTd.textContent = 3

    serieTr.appendChild(idTd);
    serieTr.appendChild(createTd(serie.name, 'info-nome', 'text-center', 'uppercase'));
    serieTr.appendChild(createTd(serie.seasons, 'info-temp', 'text-center', 'uppercase'));
    serieTr.appendChild(createTd(serie.eps, 'info-total-ep', 'text-center', 'uppercase'));
    serieTr.appendChild(createTd(serie.watchEps, 'info-eps', 'text-center', 'uppercase'));
    serieTr.appendChild(createTd(serie.progress, 'info-progresso', 'text-center', 'uppercase'));

    return serieTr;

}
4 respostas

Tu pode postar o erro ?

Então Pedro, o código não está retornando erro no console, porém está inserindo uma progressbar de forma errada no primeiro registro da minha tabela, sendo que deveria inserir no último.

Tenho um print do problema mas não consigo postar aqui, como faço pra lhe enviar?

Consegui hospedar no Drive a foto do que está ocorrendo: https://drive.google.com/file/d/1D9k73bEHtUQYK_WmuIIVuzSqGLjqJ0iN/view?usp=sharing

Oi Jonathan, boa tarde.

Desculpa pela demora, acho que o seu problema está em confundir o terceiro filho da tabela, com a 3 posição das TR´s. Vou explicar aqui um pouco melhor, quando tratamos coleções é costumeiro atribuir posições a ordem estabelecida, a posição, diferentemente do que se pensa inicia-se no 0, e não no 1. Tenta substituir para posição 2, e veja se dá certo, posso estar errado também, porque não cheguei a testar seu código ainda, mas é importante que você aprenda a pensar nas possibilidades de erros que existem.

Atenciosamente,

Pedro Marcello