Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Кроссбраузерно взять чилдов.


Автор: Ghirik 8.6.2008, 09:33
Делаю так:

Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Title block</title>
<script type="text/javascript">
<!-- // --><![CDATA[

function qwe(o) {
    cilds = o.childNodes;
    var a = cilds.length;
    while (a--) {
        document.getElementsByTagName('body')[0].innerHTML += cilds[a].nodeName + '<br />';
    }
}

// ]]>
</script>
</head>
<body>
<div style="position: absolute; width: 100px; height: 100px; z-index: 1; border: 1px solid #0000FF; left:161px; top:16px; background-color:#C0C0C0" onclick="qwe(this)">
<div></div>
<div><p></p></div>
<div></div>
<div></div>
</div>
</body>
</html>


IE молчит... Если убрать абсолютное позиционирование, то выводит имя первого чилда и потом ошибку "Требуется объект".
Вообще, требуется кроссбраузерно взять всех чилдов, исключая мозиловский #text. Имена тэгов зарание не известны. Может у кого есть готовое решение?




Автор: Ghirik 8.6.2008, 10:01
Ага.. с первым моментом разобрался, в IE просто клик не происходит если див пустой, сделал заливку фона  background-color:#C0C0C0 и исправил в коде. Но на втором чилде IE так и продолжает спотыкаться....  smile

Добавлено @ 10:12
Разобрался. Это он их к body не хочет плюсовать, а в отдельный контейнер плюсует нормально.

Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Title block</title>
<script type="text/javascript">
<!-- // --><![CDATA[
function qwe(o) {
    cilds = o.childNodes;
    var a = cilds.length;
    while (a--) {
        document.getElementById('div2').innerHTML += cilds[a].nodeName + '<br />';
    }
}
// ]]>
</script>
</head>
<body>
<div style="position: absolute; width: 100px; height: 100px; z-index: 1; border: 1px solid #0000FF; left:161px; top:16px; background-color:#C0C0C0" onclick="qwe(this)">
<div><p></p></div>
<div>kjhjkh</div>
<div>kjhjkh</div>
<div>kjhjkh</div>
</div>
<div id="div2">
</div>
</body>
</html>


Жалко, пообщаться не успели.  smile 


Автор: Ghirik 8.6.2008, 11:10
Опять проблема, теперь не могу отсеять #text.
Мне по задаче нужно все чилды, отличные от #text, сложить в массив, повешанный на парента.

Делаю так:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Title block</title>
<script type="text/javascript">
<!-- // --><![CDATA[
function qwe(o) {
    o = o.parentNode;
    o.childs = [];
    var childs = o.childNodes;
    var i = 0;
    while (i < childs.length) {
        if (childs[i].nodeName != '#text') o.childs[i] = childs[i];
        i++
    }
    var a = 0;
    while (a < o.childs.length) {
        document.getElementById('div2').innerHTML += o.childs[a].nodeName + '<br />';
        a++;
    }
}
// ]]>
</script>
</head>
<body>
<div style="position: absolute; width: 100px; height: 100px; z-index: 1; border: 1px solid #0000FF; left:161px; top:16px; background-color:#C0C0C0">
<div><p></p></div>
<div onclick="qwe(this)">kjhjkh</div>
<div>kjhjkh</div>
<div>kjhjkh</div>
</div>
<div id="div2">
</div>
</body>
</html>


FF ругается на отсутствие свойства nodeName у o.childs[a].

Вообще, при таком складывании элементов в массив, что в него кладется? Ссылка на элемент? Или создается копия элемента? Во всяком случае, называется полученный элемент массива "object"


Автор: Wolf1994 8.6.2008, 11:26
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Title block</title>
<script type="text/javascript">
<!-- // --><![CDATA[
function qwe(o) {
    o = o.parentNode;
    o.childs = [];
    var childs = o.childNodes;
    var i = 0;
    var a = 0;
    while (i < childs.length) {
        if (childs[i].nodeName != '#text')
    {
     o.childs[a] = childs[i];
         a++;
    }
    i++;
    }
    var a = 0;
    while (a < o.childs.length) {
        document.getElementById('div2').innerHTML += o.childs[a].nodeName + '<br />';
        a++;
    }
}
// ]]>
</script>
</head>
<body>
<div style="position: absolute; width: 100px; height: 100px; z-index: 1; border: 1px solid #0000FF; left:161px; top:16px; background-color:#C0C0C0">
<div><p></p></div>
<div onclick="qwe(this)">kjhjkh</div>
<div>kjhjkh</div>
<div>kjhjkh</div>
</div>
<div id="div2">
</div>
</body>
</html

Автор: Ghirik 8.6.2008, 11:40
Wolf1994, спасибо.
До меня уже  тоже дошло, что нужно два счетчика.  smile 

Бывает... smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)