>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Особенности DOM? http://forum.mozilla-russia.org/viewtopic.php?id=3893 |
4m@t!c > 07-07-2005 19:01:06 |
Обновил Лису до 1.0.4 - вылез глюк. Оказывается что у <TABLE> firstChild это не узел <TBODY>, а непонятно что.)). Глянул в структуру ДОМа по Лисе - оказывается, что это #text. |
SOb > 08-07-2005 09:27:42 |
4m@t!c пишет
А какая стояла задача? |
4m@t!c > 08-07-2005 10:21:29 |
Вообще-то - вставка строки в таблицу.... А причем здесь задача? Есть неприятная особенность, котрую вы сами можете наблюдать, открыв инспектор DOM. Иерархия идет <TABLE>--->#text---><TBODY>---><TR>, а должно <TABLE>---><TBODY>---><TR>. |
ssn > 08-07-2005 14:32:42 |
А как эта особенность зависит от версии FF 1.0.4? Выделить код Код:row = document.getElementById("idtable").insertRow(0); cell=row.insertCell(0); cell.innerHTML="bla-bla-bla"; А о firstChild и lastChild лучше забудь |
4m@t!c > 08-07-2005 15:28:48 |
>А как эта особенность зависит от версии FF 1.0.4? >А о firstChild и lastChild лучше забудь За insertRow() почему-то не подумал сразу..) Спасибо, за предложенный вариант. Но все равно, почему пробелы/табуляцию/перевод строки на границе <TBODY><TR> воспринимает, как узел, а на границе </TR></TBODY> пробельные символ не учитываются? |
Unghost > 08-07-2005 22:23:39 |
==> Разработка |
ssn > 09-07-2005 01:45:34 |
4m@t!c пишет
Похоже таковы особенности реализации Gecko и они напрягают не только тебя: |
4m@t!c > 16-06-2006 16:33:26 |
Решил не заводить новый топик. Подымаю старый. |
Lynn > 16-06-2006 16:42:39 |
Проверять не имя тега, а тип узла (nodeType). |
mozilla_user > 16-06-2006 17:00:44 |
4m@t!c пишет
Да тоже, решал проблему у Лис с табуляцией и пробелом, которые создают узел ака text Вот, что Вам может быть поможет взглянуть на ваше решение по другому - в случае, когда нужны элементы table соответственно обращаемся myTable.rows[n].cells[n] |
4m@t!c > 16-06-2006 17:05:47 |
Lynn, спасибо.
Тоже вариант, но все равно - костыль. |
4m@t!c > 16-06-2006 17:25:24 |
mozilla_user пишет
+1. |
4m@t!c > 16-06-2006 17:59:34 |
А как решали проблему, что достучаться к нужной строке в ИЕ можно , а в Лисе . При поптыке обратиться к строке, как методу объекта - Лиса выдает сообщение об ошибке наподобие
При попытке обратиться в ИЕ с помощью кода я получаю сообщение об ошибке, если идентификатор нечисло, если число, то все отлично отрабатывает. Как вы решили эту проблему? Передавали номер строки? Протормозил. Решил так. Перадл идентификатор строки. А затем уже воспользовался cells: Выделить код Код:tr = document.getElementById(idObj); alert(tr.cells[1].innerText);//В Лисе не отработал, но отработал в ИЕ, Опера. alert(tr.cells[1].innerHTML);//Везде отработал, но нужен текст, а не HTML-код. alert(tr.cells[1].firstChild.nodeValue);//В Лисе не отработал, но отработал в ИЕ, Опера. |
mozilla_user > 16-06-2006 19:09:36 |
4m@t!c пишет
У меня сейчас три Геко старая Мозила, Лис и Нетскэйп Поэтому давайте сверим часы (а вдруг? )у вас что-то не так На этой странице вводим в локэйшн с javascript: получаем в алерте элемент филдсет с иннером (?) |
4m@t!c > 16-06-2006 19:17:39 |
Филдсет - это то, что лежит внутри <TD></TD> верхней левой ячейки первой таблицы? Если да, то ДА. |
mozilla_user > 16-06-2006 19:20:03 |
ОК - значит всё работает |
4m@t!c > 16-06-2006 19:24:40 |
Мне не нужен innerHTML, потому что в нем присутствуют HTML-теги - мне нужен чистый текст, что бы выдать его юзеру. |
mozilla_user > 16-06-2006 19:37:46 |
4m@t!c пишет Навсякий случай уточню: Чисто для примера Выделить код Код:for (var i=0,row; i<myTable.rows.length; i++) { row = myTable.rows[i]; for (var n=0,cel; i<row.cells.length; n++) { cel = myTable.cells[n]; try { /* делаем что-то полезное с cel */ } catch(e) { /* перехватываем что-то c cel */ } } } |
4m@t!c > 16-06-2006 19:55:05 |
Моделируем ситуацию: Hint: В ИЕ вы не можете обратиться к ассоциативному хешу, а можете обратиться к числовому. Т.е. в ИЕ конструкция myTable.rows["text_id"] выдаст сообщение об ошибке. Поэтому обратиться к нужной строке можно с помощью метода getElementById, и потому жуе обращаться к хешу ячеек в полученной строке. P.S. Не понял вообще, как работает ваш скрипт. По-моему он не работает. |
mozilla_user > 16-06-2006 20:09:40 |
4m@t!c пишет
4m@t!c пишет
innerHTML - эт только для примера - главное мы получили объект. А доступ к остальным полям объекта это как Вы сами понимаете "дело техники" function catchText (cell_id) уж конечно всё это в упращённом виде: пример вам надо модифицировать в соответствиии с потребностями |
mozilla_user > 16-06-2006 20:33:23 |
4m@t!c пишет
Да я описался (cut & copy ) я не праверил но мысль то ясна ниже работающий пример Выделить код Код:<html> <head> <title>Mozilla > test</title> </head> <body> <table cellspacing="0" cellpadding="0" id="myAllTexts"> <tr> <td id="gt0"> In Mozilla and in IE </td> <tr> <tr> <td id="et"> ( </td> <tr> <tr> <td id="et"> don't </td> <tr> <tr> <td id="et"> ) </td> <tr> <tr> <td id="gt1"> work </td> <tr> <tr> <td id="gt2"> that </td> <tr> </table> <script type="text/javascript"> <!-- function catchText(myTable, cell_id) { var text = ""; for (var i=0,row; i<myTable.rows.length; i++) { row = myTable.rows[i]; for (var n=0,cel; n<row.cells.length; n++) { cel = row.cells[n]; if (!cel.id.match(cell_id)) continue; /* если код для IE и Мозиллы */ text += " " + (cel.textContent || cel.innerText); } } return text; } alert(catchText(document.getElementById("myAllTexts"), "gt")) //--> </script> </body> </html> |
SOb > 17-06-2006 11:34:22 |
А если вот так: Выделить код Код:allDivs = document.getElementsByTagName('div'); for (var i = 0; i < allDivs.length; i++) { thisDiv = allDivs[i]; if(thisDiv.<что-то> <сравнение> <условие>) { <действие> } } ? |
4m@t!c > 21-06-2006 13:33:08 |
Господа, извините за оффтоп, но вот такая особеность Лисы - это просто ужас для работы с DOMами. В конечном итоге скрипт вырос в два раза, потому что нужно проверять nodeType и брать следующий элемент после узла с типом 3. |