Привет!
Есть скрипт оббегающий DOM-дерево для поиска элементов определенного класса. В IE и лисе все работает как часы. В опере (Win, 9.25) на выделенной строчке (код ниже) происходит ошибка. Эксперимент показывает, что в цикле успешно проходятся DOM-элементы head, включая script, после чего появляется некий undefined object (это не ie-specific строка с pngfix.js, проверял) и скрипт прерывается.
Вопросы.
1. Что это за undefined/null object?
2. Как определить условие, чтобы пропускать такие объекты?
Ниже текст ошибки и html-код.
Error:
name: TypeError
message: Statement on line 104: Could not convert undefined or null to object
...
if (all[e].className.search(className) != — 1)
...
(Это нормально, что консоль ошибок дает неправильные номера строк или где-то опции подкрутить можно?)
Спасибо.
PS JavaScript знаю полчаса, так что просьба сильно не пинать

PSS Код, безусловно будет переписан и дерево не будет оббегаться целиком, но с ошибкой необходимо разобраться.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<link rel="stylesheet" type="text/css" href="./base.css" media="all" />
<link rel="stylesheet" type="text/css" href="./request.css" media="all" />
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title></title>
<script type="text/javascript">
function getElementsByStyleClass (className)
{
var all = document.all ? document.all : document.getElementsByTagName('*');
var elements = new Array();
for (var e = 0; e < all.length; e++)
{
//alert( all[e].tagName );
//alert( all[e].innerHTML );
if ( all[e].className.search(className) != -1 ) // == className
elements[elements.length] = all[e];
}
return elements;
}
function f( checked )
{
var classes = new Array(....);
for ( var c = 0; c < classes.length; c++ )
{
var es = getElementsByStyleClass(classes[c]);
....
}
}
</script>
<!--[if lt IE 7.]><script defer type="text/javascript" src="./js/pngfix.js"></script><![endif]-->
</head>
<body id="">
</body>
</html>
SO>Error:
SO>name: TypeError
SO>message: Statement on line 104: Could not convert undefined or null to object
SO>...
SO> if (all[e].className.search(className) != — 1)
SO>...
А если просто проверять наличие className перед поиском класса?
if (all[e].className && all[e].className.search(className) != -1)
P.S. Неверные номера строк — это вообще общее место. Если кто подскажет способы борьбы...
Здравствуйте, Fenrir, Вы писали:
F>А если просто проверять наличие className перед поиском класса?
F>F>if (all[e].className && all[e].className.search(className) != -1)
F>
Да, вариант. И еще по-хорошему, стоит посмотреть тип этого элемента.
Здравствуйте, ShaggyOwl, Вы писали:
SO>Здравствуйте, Fenrir, Вы писали:
F>>А если просто проверять наличие className перед поиском класса?
F>>if (all[e].className && all[e].className.search(className) != -1)
F>>
SO>Да, вариант. И еще по-хорошему, стоит посмотреть тип этого элемента.
Это уже совсем по хорошему

В принципе, если у элемента неподходящий тип, className просто будет undefined (что уже проверяется). Могу ошибаться...