Почему Chrome добавляет тег tbody в каждую строку таблицы?

У меня есть две таблицы, которые заполняют события.

Таблица стилей создана для того, чтобы четные строки окрашивались в белый цвет.

table {

border-collapse: collapse;
width: 100%;

}

td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}

tr:nth-child(even) {
background-color: #dddddd;
}

Но из-за того, что Chrome добавляет тег tbody к каждому тегу tr, он не работает.

Первая таблица заполняется бэкендом:

var prueba = {};
    prueba = nuevaCadena[nuevaCadena.length - 1].replace(/<br>/g, "").split(",");
    prueba.venta = prueba[0];
    prueba.fecha = prueba[1];
    prueba.heladeria = prueba[2];

    //prueba.base.split(",");

    //if (myElem === null) {
    var contenido = document.getElementById("contenido");
    var tr2 = document.createElement("TR");


    if (contenido.getElementsByTagName("TH").length === 0)
    {
        contenido.appendChild(tr2);
        tr2.innerHTML += "<th>Heladeria</th>";
        tr2.innerHTML += "<th>Fecha</th>";
        tr2.innerHTML += "<th>ID</th>";

    } else {
       var template = "<tr><td>{{heladeria}}</td><td>{{fecha}}</td><td>{{venta}}</td></tr>";

        document.querySelector('#contenido').innerHTML +=       Mustache.render(template, prueba);

   }

А второй работает отлично. Он заполняется значениями тега select.

var contenido = document.getElementById("contenido2");
var tr2 = document.createElement("TR");

var tr = document.createElement("TR");
if (contenido.getElementsByTagName("TH").length === 0)
{
contenido.appendChild(tr2);
tr2.innerHTML += "<th>Heladeria</th>";
tr2.innerHTML += "<th>Fecha</th>";
tr2.innerHTML += "<th>Sabor</th>";
tr2.innerHTML += "<th>Cantidad</th>";

}



contenido.appendChild(tr);

//var th = document.createElement("TD");
var option = ["heladerias", "sabores"];
var valor = document.getElementById("sabor_calorias");
var fecha = document.getElementById("fecha");


for (var i = 0; i <= 0; i++) {

var input = document.getElementById(option[i]).selectedIndex;
var input2 = document.getElementById(option[i]).options;

tr.innerHTML += "<td>" + input2[input].text + "</td>";
tr.innerHTML += "<td>" + fecha.value + "</td>";

for (var j = 1; j <= 1; j++) {

    input = document.getElementById(option[j]).selectedIndex;
    input2 = document.getElementById(option[j]).options;
    tr.innerHTML += "<td>" + input2[input].text + "</td>";
    tr.innerHTML += "<td>" + valor.value + "</td>";
    tr.innerHTML += "<input type='button' class='borrar' value='x'         onclick='deleted(this)'/>";

}


}

Результаты таковы:

Этот вопрос мне не помог Почему браузеры вставляют элемент tbody в элементы таблицы? я использую Mustache.

Снимок экрана таблицы

Скриншот Chrome, добавляющий tbody


person TOMAS    schedule 14.02.2017    source источник
comment
Какой окончательный HTML у хрома?   -  person CalvT    schedule 14.02.2017
comment
i.stack.imgur.com/dWfWd.png находится в ссылке выше, добавление Chrome тело   -  person TOMAS    schedule 14.02.2017
comment
@TOMAS а, хорошо, спасибо. Кстати, включение кода в виде изображений/скриншотов не считается хорошей практикой.   -  person CalvT    schedule 14.02.2017
comment
@bitsoflogic Нет, этот вопрос никоим образом не решает проблему, которую он только что объяснил.. НЕТ решений...   -  person TOMAS    schedule 14.02.2017
comment
Извините, но этот код JavaScript не имеет значения. Покажите окончательный HTML-код, когда он передается по сети, не проанализированный DOM, отображаемый в браузере.   -  person Svante    schedule 15.02.2017
comment
@Svante, это вопрос, посмотри ...   -  person TOMAS    schedule 15.02.2017
comment
Вы пытались начать с: <table> <tbody id="contenido2"></tbody></table> вместо <table id="contenido2"> </table>, так что tbody уже есть   -  person G-Cyrillus    schedule 15.02.2017
comment
Я только что сделал это на мгновение, и это работает. Кажется, что невозможно избежать tbody использования Усов.   -  person TOMAS    schedule 15.02.2017


Ответы (2)


При анализе синтаксиса HTML браузер вставит тег tbody, как описано в Почему браузеры до сих пор вставляют ‹tbody› в HTML5?. Каждый раз добавляя к innerHTML, вы каждый раз создаете новый tbody. Синтаксис HTML не может представить tr как прямой дочерний элемент таблицы.

Вместо этого вы можете использовать

tr = table.insertRow()
tr.innerHTML='<td>foo<td>bar'

если вы все еще хотите написать строку с помощью innerHTML или также использовать td = tr.insertCell().

person Josh Lee    schedule 14.02.2017
comment
В порядке. но проверьте, что последняя таблица создана с помощью inner и не имеет такой же проблемы. Я пытаюсь добавить индивидуальность тега <td> tr.inner += "<td>{{heladeria}}</td>", и проблема решена, но Усы не заполняют теги {{}} - person TOMAS; 14.02.2017

Теги, которые добавляет хром, не нужны и не должны влиять на ваш код.

Если вы продолжаете получать сообщение об ошибке, вы можете попробовать пройти ее, чтобы убедиться, что у вас нет пропущенных символов.

person AlphaGamer150    schedule 14.02.2017
comment
Но они влияют на его код — они путаются с nth-child в CSS. - person CalvT; 14.02.2017
comment
Они не должны. - person AlphaGamer150; 14.02.2017