Opera, undefined/null object
От: ShaggyOwl Россия http://www.rsdn.org
Дата: 14.02.08 08:22
Оценка:
Привет!

Есть скрипт оббегающий 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>
Хорошо там, где мы есть! :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.