Рассмотрим следующий код JavaScript, предназначенный для создания таблицы 8x8 внутри контейнера div с id="c"
:
//first, two shortcut functions
function $id(a){return(a&&a.nodeType)?a:document.getElementById(a);}
function $cr8(a){return document.createElement(a);}
//now the meat
var ct = $id('c'),
t = $cr8('table'),
tr, td,
row = 8, cols = 8,
tdclkfn = function () { alert('row: '+this.i+' col: '+this.j); }
for(var i=0;i<row;i++) {
tr = $cr8('tr');
for(var j=0;j<cols;j++) {
td = $cr8('td');
td.i = i;
td.j = j;
td.onclick = tdclkfn;
tr.appendChild(td);
}
t.appendChild(tr);
}
ct.appendChild(t);
. Это работает, как ожидается, в Firefox, Chrome и IE8.Не так много в IE6 / IE7.Как вы можете видеть в этом живом примере , разметка таблицы отсутствует,
Если вы ковыряетесь под капотом, используя Firebug Lite или панель инструментов разработчика IE, выможет обнаружить, что элементы DOM действительно есть, но по какой-то причине они просто не отображаются.Кто-нибудь знает почему?
Я решил посмотреть, что произойдет, если я добавлю ct.innerHTML += '<div/>'
в конец вышеупомянутого JavaScript.Presto, это обнаруживается (см. этот обновленный живой пример ).Почему это решает проблему?
Кроме того, функцию, которую я прикрепил к обработчику событий onclick
для каждого <td>
?Очевидно это не стреляет вообще.Он прикреплен, вы можете вызвать его вручную, но нажав на ячейку?Нет, не в IE6 / 7.Почему?
Я знаю, что могу обойти это, используя симпатичный JS / DOM-фреймворк, но мне действительно было бы интересно узнать, что здесь происходит.