Почему нельзя указать атрибуцию id = show с помощью функции show?

 

function show(){
    table_show = '<table id = "show">';
    table_show += "<tr>";
    table_show += "<td>" + "id" + "</td>";
    table_show += "<td>" + "date" + "</td>";
    table_show += "<td>" + "type" + "</td>";
    table_show += "</tr>";
    table_show += "</table>";
    var parent = document.body;
    var tmp = document.createElement("table");
    tmp.innerHTML = table_show;
    parent.appendChild(tmp);
}

ob = document.getElementById("bShow");
ob.addEventListener("click",show);
 
 
<input id = "bShow" type = "button" value = "show_table">
 

Я хочу добавить новую таблицу с функцией show, когда вы нажимаете кнопку, чтобы вызвать функцию показа через addEventListener, новая таблица создается, но без атрибуции id = "show" в ней, почему? Первая строка в функции show:

table_show = '<table id = "show">';

Почему не создается id = "show" в новой таблице?

Почему нельзя указать атрибуцию id = show с помощью функции show?

Потому что вы сделали document.createElement("table");. Либо добавьте outerHTML тега, как в случае с <table id = "show">, либо используйте document.createElement('table'), но не оба сразу.

CertainPerformance 16.12.2018 10:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
52
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы создали 2 тега таблицы,

table_show = '<table id = "show">';

и

var tmp = document.createElement("table");

используйте только 1 тег, если вы хотите использовать javascript, используйте метод setAttribute () для добавления атрибута id в таблицу вашего элемента.

Как указано в комментарии CertainPerformace, проблема связана с созданием table с последующим добавлением к нему другого table. Поскольку это недействительный HTML-код, он удаляется браузером (или любое количество вещей, которые браузер решает сделать).

Следующее будет работать и создать действительный HTML.

function show(){
    table_show = "<tr>";
    table_show += "<td>" + "id" + "</td>";
    table_show += "<td>" + "date" + "</td>";
    table_show += "<td>" + "type" + "</td>";
    table_show += "</tr>";
    var parent = document.body;
    var tmp = document.createElement("table");
    tmp.setAttribute("id","show");
    tmp.innerHTML = table_show;
    parent.appendChild(tmp);
}

ob = document.getElementById("bShow");
ob.addEventListener("click",show);
<input id = "bShow" type = "button" value = "show_table">

Фактически var tmp = document.createElement("table"); удаляет ваш атрибут id. Потому что document.createElement всегда возвращает чистый элемент DOM. Слегка обновите ваше шоу function(), как показано в следующем фрагменте:

function show(){
    table_show = '';
    table_show += "<tr>";
    table_show += "<td>" + "id" + "</td>";
    table_show += "<td>" + "date" + "</td>";
    table_show += "<td>" + "type" + "</td>";
    table_show += "</tr>";
    var parent = document.body;
    var tmp = document.createElement("table");
	tmp.id = 'show';
    tmp.innerHTML = table_show;
    parent.appendChild(tmp);
}

ob = document.getElementById("bShow");
ob.addEventListener("click",show);
<input id = "bShow" type = "button" value = "show_table">
Ответ принят как подходящий

Атрибут я бы должен быть уникальным в документе, вместо этого используйте class. Вам также не нужно использовать createElement() для повторного создания таблицы, поскольку она уже находится в htmlString.

Вы можете использовать parent.innerHTML += table_show для обновления HTML в контейнере. Вы также можете использовать insertAdjacentHTML() для вставки htmlString в DOM.

var parent = document.getElementById("container");
function show(){
  table_show = '<table class = "show">';
  table_show += "<tr>";
  table_show += "<td>" + "id" + "</td>";
  table_show += "<td>" + "date" + "</td>";
  table_show += "<td>" + "type" + "</td>";
  table_show += "</tr>";
  table_show += "</table>";
  parent.insertAdjacentHTML('beforeend', table_show);
}

ob = document.getElementById("bShow");
ob.addEventListener("click",show);
<input id = "bShow" type = "button" value = "show_table">
<div id = "container"></div>

Другой способ, также указанный CertainPerformance, решить с помощью outerHTML.

 

function show(){
    table_show = '<table id = "show">';
    table_show += "<tr>";
    table_show += "<td>" + "id" + "</td>";
    table_show += "<td>" + "date" + "</td>";
    table_show += "<td>" + "type" + "</td>";
    table_show += "</tr>";
    table_show += "</table>";
    var parent = document.body;
    var tmp = document.createElement("table");
    parent.appendChild(tmp);
    tmp.outerHTML = table_show;
}

ob = document.getElementById("bShow");
ob.addEventListener("click",show);
 
 
<input id = "bShow" type = "button" value = "show_table">
 

Другие вопросы по теме