Как добавить <table> с помощью элемента с прототипом в IE6?

Используя «новый элемент (...)» Prototype 1.6, я пытаюсь создать элемент <table> как с <thead>, так и с <tbody>, но в IE6 ничего не происходит.

var tableProto = new Element('table').update('<thead><tr><th>Situation Task</th><th>Action</th><th>Result</th></tr></thead><tbody><tr><td>a</td><td>b</td><td>c</td></tr></tbody>');

Затем я пытаюсь ввести его копии следующим образом:

$$('div.question').each(function(o) {
  Element.insert(o, { after:$(tableProto.cloneNode(true)) });
});

Мой текущий обходной путь - создать <div> вместо элемента <table>, а затем «обновить» его, добавив в него весь HTML-код таблицы.

Как это сделать?

Поведение ключевого слова "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) для оценки ваших знаний,...
4
0
5 370
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если метод прототипов .update () внутренне пытается установить .innerHTML, он потерпит неудачу в IE. В IE .innerHTML элемента таблицы доступен только для чтения.

Источник:

http://webbugtrack.blogspot.com/2007/12/bug-210-no-innerhtml-support-on-tables.html

Ответ принят как подходящий

Как оказалось, в примере кода, который я предоставил в вопросе, нет ничего плохого - он отлично работает в IE6. Проблема, с которой я столкнулся, заключается в том, что я также неправильно указывал класс для элемента <table> в конструкторе, но пропустил это в моем примере.

"Настоящий" код был следующим, и он неверен:

var tableProto = new Element('table', { class:'hide-on-screen'} ).update('<thead><tr><th>Situation Task</th><th>Action</th><th>Result</th></tr></thead><tbody><tr><td>a</td><td>b</td><td>c</td></tr></tbody>');

Это работает правильно в Firefox, но не работает в IE6, потому что это неправильный.

Правильный способ добавления атрибутов к элементу с помощью этого конструктора - предоставить строки, а не только имена атрибутов. Следующий код работает в обоих браузерах:

var tableProto = new Element('table', { 'class':'hide-on-screen'} ).update('<thead><tr><th>Situation Task</th><th>Action</th><th>Result</th></tr></thead><tbody><tr><td>a</td><td>b</td><td>c</td></tr></tbody>');

Возникла ошибка из-за того, что "класс" является зарезервированным словом в JavaScript. Дох!

Пусть это станет уроком для тех, кто не предоставляет свой код действительный!

в качестве альтернативы вы могли бы использовать className вместо class. prototypejs.org/2007/5/12/dom-builder#comment-15777

defeated 16.10.2008 07:11

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