Javascript вопрос

malls
На сайте с 08.08.2005
Offline
255
796

Есть конструкция:

<dl>

<dt onClick="alert(#)">topic 1</dt>
<dd>text 1</dd>
<dd>text 2</dd>
<dt>topic 2</dt>
<dd>text 3</dd>
<dd>text 4</dd>
</dl>

Пытаюсь делать (вместо #):

1. this.tagName - везде все нормально - проблем нет, выдает DT

2. this.nextSibling.tagName - Осел выдает DD, Опера с Фоксом undefined

3. this.nextSibling.getAttribute('tagname') - Осел выдает DD, Опера с Фоксом ничего

4. this.nextSibling - Осел: [object], Опера с Фоксом: [object Text]

5. this.nextSibling.nodeName - Осел выдает DD, Опера с Фоксом #text

Т.е. все они понимают следующий узел как объект - но работать с ним дает только Осел. В чем подвох? Как к нему обратиться?

Причем Осел позволяет менять этот элемент (стили ему менять через .style.*="*"), а Опера с Фоксом - нет!

ЗЫ: задача в общем в том чтобы по клику пробежаться по всем нижеследующим элементам DD, вплоть до следующего DT и поставить им display=block

[Удален]
#1

http://forum.javascript.ru/events/1806-nextsibling-v-ie.html здесь похожая проблема, глянь может поможет. Да и вообще, там бы поискал, уверен там есть решение.

Pike
На сайте с 13.07.2004
Offline
79
#2

prototype.js попользуйте если религия позволяет. Он как раз и написан для того чтобы с разносортными браузерами самому любовью не заниматься 🙄

free hosting (http://rahost.com)
malls
На сайте с 08.08.2005
Offline
255
#3
KosoyRoman:
здесь похожая проблема

:) она похожая но не та. У меня как раз наоборот - Осел все жрет как проклятый. Остальные не хотят.

Pike:
prototype.js попользуйте если религия позволяет. Он как раз и написан для того чтобы с разносортными браузерами самому любовью не заниматься 🙄

Любовь дело вообще то не вредное! ;)

kil
На сайте с 03.04.2006
Offline
84
kil
#4

FF и Opera считают, что текст и пробелы - это тоже элемент.

<dl><dt onClick="alert(this.nextSibling.tagName)">topic 1</dt><dd>text 1</dd><dd>text 2</dd><dt>topic 2</dt><dd>text 3</dd><dd>text 4</dd></dl>
Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#5

Вы всё ещё кипятите? jQuery идёт к вам!

Заменяем списки определений (<dl>, <dt>, <dd>) на просто списки (<ul>, <li>) и изящным кодом решаем поставленную задачу:

$(document).ready(function() {

$('ul > li').click(function(){
$(this).find('ul').toggle();
});
});

Пример

ZZZubec
На сайте с 03.03.2009
Offline
1
#6
malls:
ЗЫ: задача в общем в том чтобы по клику пробежаться по всем нижеследующим элементам DD, вплоть до следующего DT и поставить им display=block

<html>

<head>
<title></title>
<meta content="">
<style></style>
</head>
<body></body>

<script language="javascript">
function nextSib( n )
{
do n = n.nextSibling;
while (n && n.nodeType != 1);
return n;
}

function prevSib( p )
{
do p = p.previousSibling;
while (p && p.nodeType != 1);
return p;
}

function getNextObject( n )
{
return nextSib( n );
}
</script>

<dl>
<dt id="myid" onClick="alert( getNextObject( getNextObject( this ) ).innerHTML );">topic 1</dt>
<dd>text 1</dd>
<dd>text 2</dd>
<dt>topic 2</dt>
<dd>text 3</dd>
<dd>text 4</dd>
</dl>
</html>

У меня в Фаерфокс работает на ура под linux, уверен что и тя заработает. Удачи! 8)

malls
На сайте с 08.08.2005
Offline
255
#7

Алексей Барыкин

"Заменяем списки" и "и изящным" это уже нонсенс, т.к. одно другому противоречит.

ZZZubec

Зачет - молодец. Только не понимаю почему в таком варианте работает, а в упрощенном нет.

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#8
malls:
Алексей Барыкин
"Заменяем списки" и "и изящным" это уже нонсенс, т.к. одно другому противоречит.

Вам "шашечки" или "ехать"?

malls
На сайте с 08.08.2005
Offline
255
#9
Алексей Барыкин:
Вам "шашечки" или "ехать"?

Для того чтобы ехать - не обязательно ждать автобус - можно поймать машину, дороже немного, но зато быстрее и комфортнее.

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#10
malls:
Для того чтобы ехать - не обязательно ждать автобус - можно поймать машину, дороже немного, но зато быстрее и комфортнее.

Ну и чей вариант быстрее в разработке получился? 😂

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий