Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Добавить строки к таблице


Автор: Elfet 29.4.2004, 15:36
Два фрейма. В одном таблица и в неё нужно из другова фрейма вставлять ячейки! У меня не вышло! sad.gif
Код

dom = (document.getElementById) ? true : false;
nn4 = (document.layers) ? true : false;
ie = (document.all) ? true : false;
ie4 = ie && !dom;

var lit=new Array();

function getRef(id) {
 if (dom) return parent.tv.document.getElementById(id);
 if (ie4) return parent.tv.document.all[id];
 if (nn4) return parent.tv.document.layers[id];
}

lit[0]="<tr><td >ЙЙЙЙЙЙЙЙЙЙЙЙ</tr></td>";

function iamget()
{
var i;
var t="";
for(i=1; i > 0; i--){
t+=lit[i];
getRef("text").innerHTML=t+getRef("text").innerHTML;
};
}


Другой фрейм:

<table width="100%" cellspacing="1" cellpadding="1" border="0">
<tr><td height="5"></tr></td>
<q id="text"></q>
</table>

Автор: Sardar 1.5.2004, 22:31
Elfet криво html пишешь: <tr><td height="5"></tr></td>
А теперь шутки в сторону... вообщем у тебя появилась трудно разрешимая задача...
IE круче всех отображает страницы, но вот DOM - это не MS технология и здесь у IE проблемы, конкретно с добавлением новых рядов в таблицу.
Если мы изменяем свойство innerHTML элемента, то мы по сути экономим время на createElement(), createTextNode(), appendChild() методах. Если юзать эти DOM'овские функции, то содержимое таблицы изменятся не будет, у Opera и Mozilla проблем нет. Если использовать DOM'овский innerHTML, то должна выскочить Runtime Error..., т.е. у IE срывает башню...

Думаю что тебе надо либо отказатся от таблиц, либо ждать патча smile.gif

Вот так должно работать следуя рекомендациям W3C:
Код

function appendText(text) {
var tb=document.getElementById("tablica");
var tr=document.createElement("TR"); //создадим строку
var td=document.createElement("TD"); // и ячейку таблицы
/* у ИЕ есть хорошее не стандартное свойство innerText
td.innerText=text;
 но мы будем писать согласно рекомендации DOM...
*/
td.appendChild(document.createTextNode(text)); //закинем в ячейку текст
tr.appendChild(td); //а саму ячейку в строку
tb.appendChild(tr); //и наконец в таблицу
/* либо проще
 tb.innerHTML+="<tr><td>"+text+</td></tr>";
*/
}

Автор: Sardar 4.5.2004, 12:58
У таблицы есть свой надинтерфейс: HTMLTableElement Interface, в котором присутствует метод insertRow(index). Тогда правильно добавить строки в таблицу можно так:
Код

table=document.getElementById("table_id" );
row=table.insertRow(table.rows.length); //в конец таблицы
row.innerHTML="<td>"+text+"</td>";

Разницы с предидущим способом никакой. IE продолжает нервно курить RunTime Error в сторонке...

Автор: mix 5.5.2004, 20:53
Sardar Вы просто про TBody забыли. IE5.0+
Код
<script LANGUAGE=JavaScript TYPE=text/javascript>
<!--
function appendText(text) {
var Tb=document.getElementById("tablica");
var Tbd=document.createElement('TBODY'); //CОЗДАДИМ TBODY их может быть несколько
var Tr=document.createElement("TR"); //создадим строку
var Td=document.createElement("TD"); // и ячейку таблицы
/* у ИЕ есть хорошее не стандартное свойство innerText
td.innerText=text;
но мы будем писать согласно рекомендации DOM...
*/
Td.appendChild(document.createTextNode(text)); //закинем в ячейку текст
Tr.appendChild(Td); //а саму ячейку в строку
Tbd.appendChild(Tr);//А САМУ строку в TBODY
Tb.appendChild(Tbd); //и наконец в таблицу
/* либо проще
tb.innerHTML+="<tr><td>"+text+</td></tr>";
*/
}
window.onload=function()//Когда страница загрузилась полностью
{
appendText('Добавили мы этот текст')
appendText('А потом ещё вот этот')
}
//-->
</SCRIPT>


<TABLE border=1 id=tablica>
<TR>
<TD>ФФ</TD>
</TR>
<TR>
<TD>FF</TD>
</TR>
</TABLE>



Автор: Sardar 6.5.2004, 00:31
Ну спасибо !!!

Действительно работает, мне надо бы точнее следить за своими ответами smile.gif

Интересно что Gecko браузерам и Opere по барабану добавляем ли мы строку к таблице либо к ТBody - это ошибка ИЕ, т.к. метод интерфейса таблицы insertRow должен был работать.

Автор: Sardar 20.12.2004, 20:22
Elfet ты только ноду добавить можешь. Следовательно юзай document.createElement, document.createTextNode или пользуйся innerHTML.

А вообще запости чуток кода и лучше в отдельном топике.

Автор: Sardar 20.12.2004, 20:57
Elfet сейчас минусы давать буду! Открывай новый топик и так такой хороший ответ зафлеймили smile

innerHTML не есть часть стандарта от W3c, введён для удобства. На второй вопрос: обращайся к Td.style.что угодно, и выброси все свои старые нетшкафовые скрипты, что бы по такому бреду не учтися.

Вычищаю твой и ALEXANDRO флуд.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)