Jump to content
  • 0

Странное клонирование заголовка


Webr
 Share

Question

Есть таблица

<table id="ComparisonTable">
<thead id="CompTableHeader">
<tr>.....</tr>
<tr>.....</tr>
<tr>.....</tr>
</thead>
<tbody>
.....
</tbody>
</table>

Есть JavaScript, с помощью которого я создаю таблицу с дубликатом заголовка и вставляю её перед основной таблицей:

function createFixedTableHeader()
{
var table = document.getElementById("ComparisonTable");
var thead = document.getElementById("CompTableHeader");
if ((table)&&(thead))
{
var ht = document.createElement("table");
ht.id = "HeaderTable";
ht.className = table.className;
ht.appendChild(thead.cloneNode(true)); //ht.innerHTML = thead.innerHTML; не работает в IE
table.parentNode.insertBefore(ht, table);

setHeaderTableColWidths();
ht.style.position = "fixed";
ht.style.top = 0;
}
}

Потом, в событии window.onscroll пытаюсь получить thead.clientHeight.

Результаты удивляют: thead.clientHeight (т.е. общая высота заголовка основной таблицы) выдаёт число только когда отображается HeaderTable (т.е. клон-таблица), а когда у клона style.display == "none", то clientHeight заголовка основной таблицы выдаёт 0.

Я уже было подумал, что метод cloneNode не создаёт копии узлов, а просто копирует указатели, но нет, все свойства у ячеек клон-таблицы сугубо индивидуальные, и их изменение не сказывается на основной таблице.

В чём дело?

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Вот как только спросил, так сразу и озарило:

Метод cloneNode копирует содержимое заголовка как есть, со всеми атрибутами, поэтому в документе появляются ДВА элемента thead с одинаковым id="CompTableHeader", но в разных таблицах, и DOM спокойно допускает такую ситуацию.

Потом метод

document.getElementById("CompTableHeader");

находит первый из них, а именно - заголовок клон-таблицы.

Решение:

После клонирования сделать

ht.firstChild.id = "CloneHeader";

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy