IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   JScript и JavaScript (https://www.imho.ws/showthread.php?t=77886)

V0iD 18.01.2005 15:33

JScript и JavaScript
 
Проблема совместимости...
Есть код на JScript:
Код:

<script language="JavaScript">
function Toggle(node) {
 if (node.nextSibling.style.display == 'none') {
  if (node.children.length > 0)        {
  if (node.children.item(0).tagName == "IMG") {
    node.children.item(0).src = "minus.gif";
  }
  if (node.children.item(1).tagName == "IMG") {
    node.children.item(1).src = "folderopen.gif";
  }
  }
  node.nextSibling.style.display = '';
 }
 else {
  if (node.children.length > 0) {
  if (node.children.item(0).tagName == "IMG") {
    node.children.item(0).src = "plus.gif";
  }
  if (node.children.item(1).tagName == "IMG") {
    node.children.item(1).src = "folderclose.gif";
  }
  }
  node.nextSibling.style.display = 'none';
 }
}
</script>

Скрипт для организации дерева категорий.
Встраивается вот в такие конструкции:
Код:

<span onClick="Toggle(this)"><img src="plus.gif">
<img src="folderclose.gif">имя</span>
<span style="display: none;">содержимое</span>

В интерпретации JScript работает, т.е. при клике на имя или иконки - открывает содержимое и меняет иконки. Но в интерпретации JavaScript (Netscape, Mozilla) не работает :confused:.
Есть идеи почему?

RaZEr 18.01.2005 16:56

Цитата:

Есть идеи почему
Так посмотри что за ошибка. Проблема то в чем...

PS: Возможно не катит item, т.к. в dom принято использовать childNodes. Аналогично tagName=nodeName.

V0iD 19.01.2005 15:00

В том то и дело, что молчит как партизан. Попробовал поменять item(..)=childNodes(..) и tagName=nodeName - не вышло...

btw, есть ли хорошая статья по совместимости браузеров? А то на сайте не только jscript не работает, есть различия в css обработке...

Sheryld 19.01.2005 15:43

в mozilla есть превосходный отладчик и dom инспектор.

а статьи: w3c.org или msdn(ежели по IE).

dom-2 core reference: http://www.w3.org/TR/2000/REC-DOM-Le...1113/core.html

RaZEr 19.01.2005 16:14

Цитата:

В том то и дело, что молчит как партизан
Сам он ничего и не должен говорить. Для этого есть JavaScript console.

Цитата:

В том то и дело, что молчит как партизан. Попробовал поменять item(..)=childNodes(..)
childNodes это массив. Научись пользоваться мануалом.

Цитата:

есть ли хорошая статья по совместимости браузеров
http://www.quirksmode.org/dom/contents.html

V0iD 19.01.2005 17:09

Цитата:

RaZEr:
Сам он ничего и не должен говорить. Для этого есть JavaScript console.
Я первым делом туда посмотрел...
Цитата:

RaZEr:
childNodes это массив. Научись пользоваться мануалом.
Да, спасибо, получилось. А мануалы не нашел :), w3c посерфил и забил... За линк спасибо тоже)).

Все у меня вышло:
Код:

function Toggle(node) {
        spanstyle = node.nextSibling.style;
        if (navigator.appName == "Microsoft Internet Explorer")
        {
                icon1 = node.children.item(0);
                icon2 = node.children.item(1);
        }
        else
        {
                icon1 = node.childNodes[0];
                icon2 = node.childNodes[1];
        }

        if (spanstyle.display == "none") {
                icon1.src = "minus.gif";
                icon2.src = "folderopen.gif";
                spanstyle.display = '';
        }
        else {
                icon1.src = "plus.gif";
                icon2.src = "folderclose.gif";
                spanstyle.display = 'none';
        }
}


Hubbitus 19.01.2005 17:17

Просто Мозилла не знает children, у нее нужно использовать вместо этого childNodes, кстати это и в ИЕ работает прекрасно, поэтому скрипт получается приблизительно такой:
Код:

<script language="JavaScript">
function Toggle(node) {
    if (node.nextSibling.style.display == 'none') {
        if (node.childNodes.length > 0){
            if (node.childNodes[0].tagName == "IMG") {
            node.childNodes[0].src = "minus.gif";
            }

            if (node.childNodes[1].tagName == "IMG") {
            node.childNodes[1].src = "folderopen.gif";
            }
        }
        node.nextSibling.style.display = '';
    }
    else {
        if (node.childNodes.length > 0) {
            if (node.childNodes[0].tagName == "IMG") {
            node.childNodes[0].src = "plus.gif";
            }
            if (node.childNodes[1].tagName == "IMG") {
            node.childNodes[1].src = "folderclose.gif";
            }
        }
    node.nextSibling.style.display = 'none';
    }
}
</script>

Упс, не успел :p :beer:

P.S. Кстати, нормально она говорит об ошибках, вполне четко и понятно, а не молчит...

V0iD 19.01.2005 17:19

Цитата:

Hubbitus:
кстати это и в ИЕ работает прекрасно
О, спасибо. А я как-то забыл проверить это в IE, разделил уже код для IE и Mozilla...
btw, я ненужные проверки тоже убрал ;).

RaZEr 19.01.2005 17:37

Цитата:

А мануалы не нашел , w3c посерфил и забил...
http://www.w3.org/TR/2004/REC-DOM-Le...0407/core.html
http://www.w3.org/TR/2004/REC-DOM-Le...t-binding.html


Часовой пояс GMT +4, время: 01:37.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.