Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Ошибка "Expected token: '}' " (https://javascript.ru/forum/events/4544-oshibka-expected-token-%27%7D%27.html)

pestO 01.08.2009 09:42

Ошибка "Expected token: '}' "
 
Есть код, который ищет 2ую таблицу на странице и во всех строках этой таблицы выполняеть поиск по 3й ячейке.

var tableElement = document.documentElement.getElementsByTagName("table")[1];
if (tableElement!=0)
{
var trElement=tableElement.getElementsByTagName("tr");
for (var i = 0; i < trElement.length; i++)
{
var td=trElement[i].getElementsByTagName("td");
if(td[3].nodeValue=="Охотник")
{
td[3].nodeValue="НЕохотник";
var hhrElement=trElement.getElementsByTagName("a")[0];
if(hhrElement!=0) hhrElement.nodeValue="aaaaa";
};
};
};


выбает ошибку
"JavaScript
User JS compilation
Syntax error D:\Дистрибутивы\Internet\Opera\hero.js : line 33 of User JS script :
Expected token: '}'
if(hhrElement!=0) hhrElement.n"
Причем именно "if(hhrElement!=0) hhrElement.n"!

Скобки расставлены вроде верно...

Тестируется в Opera 9.64 (Seven RC2).

Какие будет советы и предложения ?)

pestO 01.08.2009 11:02

"испрашил" на
var tableElement = document.documentElement.getElementsByTagName("table")[1];
if (tableElement!=0)
var trElement=tableElement.getElementsByTagName("tr");


Ошибка
"User Javascript thread
Error:
name: TypeError
message: Statement on line 12: Cannot convert undefined or null to Object
Backtrace:
Line 12 of User JS script
var trElement=tableElement.getElementsBy
stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'"

ничего не понимаю... :cray:

x-yuri 01.08.2009 12:18

if( tableElement )

p.s. отступы не просто так придумали ;)

pestO 01.08.2009 12:23

сделал более "читабельный код" с проверкой "if( tableElement )"
for(var tableElement in document.documentElement.getElementsByTagName("table"))
if(tableElement)
	for (var trElement in tableElement.getElementsByTagName("tr"))
	if(trElement)
		for(var td in trElement.getElementsByTagName("td"))
		if(td)
		if(td.nodeValue=="Охотник")
		td.nodeValue="Охотник о_О";

Не помогло =(

"message: Statement on line 13: Type mismatch (usually non-object value supplied where object required)
Backtrace:
Line 13 of User JS script
for (var trElement in tableElement.getElementsByTagName("tr"))
stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
"
Все 3 ошибки искал в гугле ничего путного не нашел.

pestO 01.08.2009 15:49

var nodeList =  document.getElementsByTagName("TABLE");
alert(nodeList.length);


На странице ровно три таблицы выпадает алерт с "0"!!!
:blink:

Как это вообще возможно?

x-yuri 02.08.2009 05:43

Цитата:

Сообщение от pestO
Не помогло =(

если не заметил, ошибка уже в другом месте. Научись понимать сообщения об ошибках

Цитата:

Сообщение от pestO
На странице ровно три таблицы выпадает алерт с "0"!!!

какой DOCTYPE?

Цитата:

Сообщение от pestO
Все 3 ошибки искал в гугле ничего путного не нашел.

это ошибки в твоем коде. Твой код уже настолько известен?

pestO 02.08.2009 12:55

Цитата:

Сообщение от x-yuri
если не заметил, ошибка уже в другом месте. Научись понимать сообщения об ошибках

пытаюсь научиться - не бейте сильно ногами))))

Цитата:

Сообщение от x-yuri
какой DOCTYPE?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
Это что-то дает?)

Цитата:

Сообщение от x-yuri
p.s. отступы не просто так придумали

То есть нужно делать отступы в if(отступ переменная отступы) ?
А как же то что javascript ужаляет все пробелы и табы при работе?...

Kolyaj 02.08.2009 13:05

Цитата:

Сообщение от pestO
А как же то что javascript ужаляет все пробелы и табы при работе?...

Во-первых, не удаляет, а игнорирует. Во-вторых, это не значит, что их не нужно ставить.

pestO 02.08.2009 13:08

хехе, да привыкшему к С++ сложно отвыкать)
Спасибо, а где можно почитать синтаксис свзанный с "пробелами"?
Если расскажут как побороться с "отсутвием" таблиц в
document.getElementsByTagName("table")
я уж дальше сам домучаю свой великий скрипт))))

Kolyaj 02.08.2009 13:11

Цитата:

Сообщение от pestO
Спасибо, а где можно почитать синтаксис свзанный с "пробелами"?

Нет там никакого синтаксиса, они же игнорируются.

Цитата:

Сообщение от pestO
Если расскажут как побороться с "отсутвием" таблиц

Скрипт вызывается после появления таблиц на странице?

На плюсах тоже без отступов пишете?

pestO 02.08.2009 13:15

А если они "игнорируються" то причем тут "отступы не просто так придумали" и "это не значит, что их не нужно ставить" -> и зачем их тjulf ставить? (кроме "красивости"=читабельнос и кода?)

Цитата:

Сообщение от Kolyaj
Скрипт вызывается после появления таблиц на странице?

Подключен в opere (НЕ в html) внешним JS файлик , и судя по тому что getElementsByTagName("body") он находит 1н "боди" то вызываеться после.
НУ разве что он вызывает в тот момент когда боди уже загружен а таблицы еще нет... ( а такое возможно?)

Kolyaj 02.08.2009 13:20

Цитата:

Сообщение от pestO
кроме "красивости"=читабельнос �и кода?

Этого мало?

Цитата:

Сообщение от pestO
а такое возможно?

Возможно.

pestO 02.08.2009 14:16

для поиска ошибок в коде мало)

ну раз возможно буду ждать мнения "x-yuri"....

x-yuri 02.08.2009 14:25

Цитата:

Сообщение от pestO
для поиска ошибок в коде мало)

но для того, чтобы у других людей не пропадало желание код просмотривать, надо

Цитата:

Сообщение от pestO
ну раз возможно буду ждать мнения "x-yuri"....

возможно

pestO 02.08.2009 14:52

о ты появился)
ответь че там с поиском элементво может быть? и как это с доктипом связано?)

x-yuri 02.08.2009 17:56

Kolyaj уже ответил. С DOCTYPE это не связано

pestO 03.08.2009 13:51

А с чем тогда?((((

x-yuri 03.08.2009 14:49

Kolyaj уже ответил и я с ним согласился, как ты помнишь

Octane 04.08.2009 13:01

Имя тега заглавными буквами не надо писать

pestO 05.08.2009 19:42

ээ.. и в чем же ошибка?
В пробелах? или в том что скрипт работает перед загрузкой?

Андрей Параничев 05.08.2009 21:21

pestO,
Если этот скрипт находится по коду выше, чем элемент с которым он пытается работать, и не является обработчиком события загрузки документа, то ошибка в этом.

pestO 05.08.2009 22:00

этот скрипт являеться User JS, подключенным к страннице в настройках operы =)

Повторюсь:
getElementsByTagName("body") находит 1н боди (что являеться правдой)
но getElementsByTagName("table") не находит ни 1ну таблицу (хотя они есть)

Андрей Параничев 05.08.2009 22:07

И что? Это ни о чем не говорит. Попробуйте такой код:
window.addEventListener("DOMContentLoaded", function() {
    alert(document.getElementsByTagName("table")[0].nodeName);
}, false);

С поправкой на window/document загружаемого документа (я не в курсе, как работает User JS в opera).

pestO 05.08.2009 22:13

Цитата:

Сообщение от Андрей Параничев
Попробуйте такой код:
window.addEventListener("DOMContentLoaded", function() {
alert(document.getElementsByTagName("table")[0].nodeName);
}, false);

почти обрадовался, пишет "TABLE"

попробовал
window.addEventListener("DOMContentLoaded", function() {
    alert(document.getElementsByTagName("table").count);
}, false);

пишет "undefined"

Андрей Параничев 05.08.2009 22:16

pestO,
Не count, а length.

pestO 05.08.2009 22:17

все, спасибо, все понял и ничего одновременно =)

pestO 05.08.2009 22:33

так. Снова я где-то делаю ошибку...

window.addEventListener("DOMContentLoaded", function() {
	for ( var a in document.getElementsByTagName("td") )
	{if( a.nodeValue=="Охотник" )
		a.nodeValue="Охотник о_О";
	};
}, false);


JavaScript
User JS compilation
Syntax error D:\Дистрибутивы\Internet\Opera\hero.js : line 20 of User JS script :
Expected token: ')'
}, fal


Вот что тут я не так делаю? опять "пробелы"?

Kolyaj 05.08.2009 22:40

Нормально тут все с синтаксисом.

pestO 05.08.2009 22:53

уже радует :write: , а что тогда? :help:

x-yuri 05.08.2009 22:56

Цитата:

Сообщение от pestO
Вот что тут я не так делаю? опять "пробелы"?

давай начнем с того, что ты переведешь сообщение об ошибке

pestO 06.08.2009 18:35

начинаем :write:
Яваскрипт
User JS компиляция
Синтаксическая ошибка D:\Дистрибутивы\Internet\Opera\hero.js : строка 20 в User JS скрипте :
Ожидаеться символ : ')'
}, fal

И что? :-/
я не понимаю.. все скобки закрыты...

x-yuri 06.08.2009 18:41

какая из строк 20-ая?

pestO 06.08.2009 19:04

}, false);

Андрей Параничев 06.08.2009 19:31

Enjoy your opera.

pestO 06.08.2009 19:34

оО.. первый совет "дельный" =))
Потом опробую пару версий..
Есть еще дельные предложения?

Андрей Параничев 06.08.2009 20:38

Этот код не содержит синтаксических ошибок, что еще можно сказать?

А если вот так запустить, что пишет:
window.addEventListener("DOMContentLoaded", function() {
    for ( var a in document.getElementsByTagName("td") )
    {if( a.nodeValue=="Охотник" )
        a.nodeValue="Охотник о_О";
    };
});


Часовой пояс GMT +3, время: 08:42.