Страницы: 1
Обновил Лису до 1.0.4 - вылез глюк. Оказывается что у <TABLE> firstChild это не узел <TBODY>, а непонятно что.)). Глянул в структуру ДОМа по Лисе - оказывается, что это #text.
#text - реагирует на пробел, табуляцию и перевод строки. Опера и ИЕ не обратили на это никакого внимания. Если строки таблицы генерятся динамически (РНР), то есть шанс, что вставишь что-нибудь из вышеперечисленного.
И что интересно, за узлы не посчитало перевод строки перед закрывающим тегом </TABLE>. Проблема решилась вызовом lastChild, но это, ИМХО, не есть верно....
----------------------------------------
Артисты не приехали, приехали цыгане
Отсутствует
Обновил Лису до 1.0.4 - вылез глюк. Оказывается что у <TABLE> firstChild это не узел <TBODY>, а непонятно что.)). Глянул в структуру ДОМа по Лисе - оказывается, что это #text.
#text - реагирует на пробел, табуляцию и перевод строки. Опера и ИЕ не обратили на это никакого внимания. Если строки таблицы генерятся динамически (РНР), то есть шанс, что вставишь что-нибудь из вышеперечисленного.
И что интересно, за узлы не посчитало перевод строки перед закрывающим тегом </TABLE>. Проблема решилась вызовом lastChild, но это, ИМХО, не есть верно....
А какая стояла задача?
Отсутствует
Вообще-то - вставка строки в таблицу.... А причем здесь задача? Есть неприятная особенность, котрую вы сами можете наблюдать, открыв инспектор DOM. Иерархия идет <TABLE>--->#text---><TBODY>---><TR>, а должно <TABLE>---><TBODY>---><TR>.
----------------------------------------
Артисты не приехали, приехали цыгане
Отсутствует
А как эта особенность зависит от версии FF 1.0.4?
Помниться всегда так было в движке Gecko
Для вставки строк в таблицу используй insertRow
Например:
row = document.getElementById("idtable").insertRow(0); cell=row.insertCell(0); cell.innerHTML="bla-bla-bla";
А о firstChild и lastChild лучше забудь
Отредактировано ssn (08-07-2005 14:44:03)
Отсутствует
>А как эта особенность зависит от версии FF 1.0.4?
ХЕЗ, раньше такого не замечал, может насписано было немного не так.
>А о firstChild и lastChild лучше забудь
Почему?
За insertRow() почему-то не подумал сразу..) Спасибо, за предложенный вариант.
Но все равно, почему пробелы/табуляцию/перевод строки на границе <TBODY><TR> воспринимает, как узел, а на границе </TR></TBODY> пробельные символ не учитываются?
Разве по нормам DOMа - это правильно?
----------------------------------------
Артисты не приехали, приехали цыгане
Отсутствует
Но все равно, почему пробелы/табуляцию/перевод строки на границе <TBODY><TR> воспринимает, как узел, а на границе </TR></TBODY> пробельные символ не учитываются?
Разве по нормам DOMа - это правильно?
Похоже таковы особенности реализации Gecko и они напрягают не только тебя:
http://www.mozilla.org/docs/dom/technote/whitespace/
http://www.codingforums.com/archive/ind … -7028.html
Пробовал экспериментировать - у меня пробельные символы проявлялись как узлы везде.
Это так называемые whitespace nodes в переводе Инспектора DOM - пробельные узлы.
По правилам DOM они должны быть, но в некоторых реализациях могут подавляться.
http://www.w3.org/DOM/faq.html#emptytext
Отсутствует
Решил не заводить новый топик. Подымаю старый.
Проблема с nextSibling/prevouseSibling.
Бегаю по узлам с помощбю описанных выше методов. Так вот мне нужно пройтись по ячейкам строки. Из-за того, что непечатаемые символы становятся узлами, попадаю не туда, куда нужно. Пока что проблему решаю проверкой имени тега. Такое решение похоже на костыль. Есть идеи?
----------------------------------------
Артисты не приехали, приехали цыгане
Отсутствует
Решил не заводить новый топик. Подымаю старый.
Проблема с nextSibling/prevouseSibling.
Да тоже, решал проблему у Лис с табуляцией и пробелом, которые создают узел ака text
Вот, что Вам может быть поможет взглянуть на ваше решение по другому - в случае, когда нужны элементы table
У таблицы есть аррэй rows - строки; и у каждой строки аррэй cells - ячейка
соответственно обращаемся myTable.rows[n].cells[n]
- ну и в циклах удобно разумеется
Отсутствует
Lynn, спасибо.
Проверять не имя тега, а тип узла (nodeType).
Тоже вариант, но все равно - костыль.
----------------------------------------
Артисты не приехали, приехали цыгане
Отсутствует
Да тоже, решал проблему у Лис с табуляцией и пробелом, которые создают узел ака text
Вот, что Вам может быть поможет взглянуть на ваше решение по другому - в случае, когда нужны элементы table
У таблицы есть аррэй rows - строки; и у каждой строки аррэй cells - ячейкасоответственно обращаемся myTable.rows[n].cells[n]
- ну и в циклах удобно разумеется
+1.
----------------------------------------
Артисты не приехали, приехали цыгане
Отсутствует
А как решали проблему, что достучаться к нужной строке в ИЕ можно
, а в Лисе
. При поптыке обратиться к строке, как методу объекта - Лиса выдает сообщение об ошибке наподобие
Ошибка: совпадающий атрибут
Источник: file:///C:/Documents%20and%20Settings/4matic/Application%20Data/Mozilla/Firefox/Profiles/v1q59t2f.default/localstore.rdf
Строка 200, символ 20
Исходный код:
NS1:LastPingDate="1144762963" />-------------------^
При попытке обратиться в ИЕ с помощью кода
я получаю сообщение об ошибке, если идентификатор нечисло, если число, то все отлично отрабатывает.
Как вы решили эту проблему? Передавали номер строки?
Протормозил. Решил так. Перадл идентификатор строки. А затем уже воспользовался cells:
tr = document.getElementById(idObj); alert(tr.cells[1].innerText);//В Лисе не отработал, но отработал в ИЕ, Опера. alert(tr.cells[1].innerHTML);//Везде отработал, но нужен текст, а не HTML-код. alert(tr.cells[1].firstChild.nodeValue);//В Лисе не отработал, но отработал в ИЕ, Опера.
Отредактировано 4m@t!c (16-06-2006 18:55:24)
----------------------------------------
Артисты не приехали, приехали цыгане
Отсутствует
В Лисе не отработал, но отработал в ИЕ, Опера.
У меня сейчас три Геко старая Мозила, Лис и Нетскэйп
везде работает
Поэтому давайте сверим часы (а вдруг? )у вас что-то не так
На этой странице вводим в локэйшн с javascript:
получаем в алерте элемент филдсет с иннером (?)
Отсутствует
получаем в алерте элемент филдсет с иннером (?)
Филдсет - это то, что лежит внутри <TD></TD> верхней левой ячейки первой таблицы? Если да, то ДА.
----------------------------------------
Артисты не приехали, приехали цыгане
Отсутствует
ОК - значит всё работает
Отсутствует
Мне не нужен innerHTML, потому что в нем присутствуют HTML-теги - мне нужен чистый текст, что бы выдать его юзеру.
----------------------------------------
Артисты не приехали, приехали цыгане
Отсутствует
Навсякий случай уточню:
rows и cells - это нумер arrays - то есть к содержащимся элементам обращаемся не через метод (), а через индекс cells[0]
Чисто для примера
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 */ } } }
Отсутствует
Моделируем ситуацию:
1. Вы не знаете номер строки, но вы знаете его буквенный идентификатор.
2. Вам нужно получить ТЕКСТ в некоторых ячейках, текст должен быть без тегов HTML.
Hint: В ИЕ вы не можете обратиться к ассоциативному хешу, а можете обратиться к числовому. Т.е. в ИЕ конструкция myTable.rows["text_id"] выдаст сообщение об ошибке. Поэтому обратиться к нужной строке можно с помощью метода getElementById, и потому жуе обращаться к хешу ячеек в полученной строке.
P.S. Не понял вообще, как работает ваш скрипт. По-моему он не работает.
----------------------------------------
Артисты не приехали, приехали цыгане
Отсутствует
Моделируем ситуацию:
1. Вы не знаете номер строки, но вы знаете его буквенный идентификатор.
2. Вам нужно получить ТЕКСТ в некоторых ячейках, текст должен быть без тегов HTML.Hint: В ИЕ вы не можете обратиться к ассоциативному хешу, а можете обратиться к числовому. Т.е. в ИЕ конструкция myTable.rows["text_id"] выдаст сообщение об ошибке. Поэтому обратиться к нужной строке можно с помощью метода getElementById, и потому жуе обращаться к хешу ячеек в полученной строке.
P.S. Не понял вообще, как работает ваш скрипт. По-моему он не работает.
Мне не нужен innerHTML, потому что в нем присутствуют HTML-теги - мне нужен чистый текст, что бы выдать его юзеру.
innerHTML - эт только для примера - главное мы получили объект. А доступ к остальным полям объекта это как Вы сами понимаете "дело техники"
Развивая тот же пример () захватываем текст у ячейки по параметру Id
function catchText (cell_id)
{
var text = "";
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];
if (cel.id != cell_id) continue;
/* для Мозиллы получаем весь текст без тегов - даже если они там есть */
text += " " + cel.textContent;
/* если код для IE и Мозиллы */
//text += " " + (cel.textContent || cel.innerText);
}
}
return text;
}
уж конечно всё это в упращённом виде: пример вам надо модифицировать в соответствиии с потребностями
всё получиться! Удачи! А я ушёл в пруд
Отсутствует
По-моему он не работает.
Да я описался (cut & copy )
во вложенном цикле (паст энд копи)
for (var n=0,cel; i<row.cells.length; n++) {
cel = myTable.cells[n];
я не праверил но мысль то ясна
ниже работающий пример
<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>
Отсутствует
А если вот так:
allDivs = document.getElementsByTagName('div'); for (var i = 0; i < allDivs.length; i++) { thisDiv = allDivs[i]; if(thisDiv.<что-то> <сравнение> <условие>) { <действие> } }
?
Отсутствует
Господа, извините за оффтоп, но вот такая особеность Лисы - это просто ужас для работы с DOMами. В конечном итоге скрипт вырос в два раза, потому что нужно проверять nodeType и брать следующий элемент после узла с типом 3.
Спасибо всем учасникам топика.
Разработчикам Лисы - просьба избавиться от этой особености Лисы.
----------------------------------------
Артисты не приехали, приехали цыгане
Отсутствует
Страницы: 1