Как сделать видимость от 2х переменных (от 1й - знаю)
Известна видимость от 1й переменной.
Цветом выделен скрипт CLOP - закрыть/открыть пункт/подробность В <body>...</body> одна из множества таблиц, видимостью которой управляет переменная _00, через "одноимённый" img - img_00 Под подробным текстом - img[-] сворачивание пункта (требуется в конце огромного текста, т.к. управляющий img[+] уже вне экрана) ------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Название</title> *!* <style type="text/css"> .sub{ visibility: hidden; display: none; } </style> <script language=javascript> function CLOP(subName) { // закрыть/открыть подробность subName if (eval(subName).style.visibility == "visible") { // если она видима eval(subName).style.visibility = "hidden"; // закрыть eval(subName).style.display = "none" // сжать опустевшее место eval("img"+subName).src="closed.gif" } // поменять картинку else { eval(subName).style.visibility = "visible"; // открыть eval(subName).style.display = "list-item" // раздвинуть текст eval("img"+subName).src="opened.gif" }} // поменять картинку </script> */!* </head> <body> № текста.(<img src ="closed.gif" id="img_00" onclick ="CLOP('_00')"> Краткий текст. <table border="1" width="100%" class ="sub" id="_00"> <tr> <td>Подробный текст. <br><img src ="opened.gif" onclick ="CLOP('_00')"> </td> </tr> </table> </body> </html>------------------------- Требуется управлять видимостью от 2х видов переменных (скажем, от _00 и s_00 = № пункта, № уровня вложенности), а лучше от двумерного массива s[№ пункта, № уровня вложенности] ------------------------- Стандартно дерево управляется/выглядит Оглавление - много пунктов: 1.[+] 2.[+] 3.[+] ...Каждый пункт раскрывается/закрывается (например, 1й): 1. [-] 1.1 [+] 1.2 [+] 1.3 [+] 2.[+] 3.[+] ...А те соответственно, дальше (например, 1й и 1.2й) 1. [-] 1.1 [+] 1.2 [-] 1.2.1 [+] 1.2.2 [+] 1.2.3 [+] 1.3 [+] 2.[+] 3.[+] ...Это стандартное управление и оно прекрасно работает. ------------------------- Требуется добавив переменную № уровня, одним кликом открывать/закрывать все пункты верхних уровней вложений/оглавлений Например, Вид ДО нажатия на второй уровень: 1й уровень оглавления.[-] 2й уровень оглавления.[+] 3й уровень оглавления.[+] 1.[+] 2.[+] 3.[+] ...Вид ПОСЛЕ нажатия на второй уровень: 1й уровень оглавления.[-] 2й уровень оглавления.[-] 3й уровень оглавления.[+] 1. [-] 1.1 [+] 1.2 [+] 1.3 [+] 2.[-] 2.1 [+] 2.2 [+] 2.3 [+] 3.[-] 3.1 [+] 3.2 [+] 3.3 [+] ... |
|
Спасибо, но это не то. (т.к. последующие клики закрывают предыдущие).
Можно ли заменить имена переменных элементами двумерного массива? Чтобы элементы менялись от клика: - 1й на пункт (как сейчас имена), - 2й на уровень вложенности. А видимость определялась их сочетанием (1 || 2) |
Пенсионер,
учебник хороший ссылка вверху ... код размещаемый лучше форматировать Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. и наверно надо как- то без Цитата:
Цитата:
|
Очень признателен Вам за помощь.
Увы, пока не могу - задействовать 2ю переменную для управления видимостью. - отказаться от eval, т.к. они работают, а чем их заменить я не знаю. Подправил 1й пост = сделал яснее свой вопрос. Нашёл учебник https://learn.javascript.ru/first-steps |
Пенсионер,
смутно вас понимаю ... <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Название</title> <style type="text/css"> .sub { visibility: hidden; display: none; } </style> <script> function CLOP(subName) { var el = document.getElementById(subName), img = document.getElementById("img" + subName); if (el.style.visibility != "visible") { el.style.visibility = "visible"; el.style.display = "list-item" img.src = "opened.gif" } else { el.style.visibility = "hidden"; el.style.display = "none" img.src = "closed.gif" } } function CLO(subName) { var el = document.getElementById(subName), img = document.getElementById("img" + subName); if (el.style.visibility != "hidden") { el.style.visibility = "hidden"; el.style.display = "none" img.src = "closed.gif" } } </script> </head> <body> Текст1.(<img src="closed.gif" id="imgsub00" onclick="CLOP('sub00')"> Текст2. <table border="1" width="100%" class="sub" id="sub00"> <tr> <td>Текст3. <br> <img src="opened.gif" onclick="CLO('sub00')"> </td> </tr> </table> </body> </html> |
Пенсионер, javascript-дерево
|
Большое спасибо за помощь.
1. Уточнил свой вопрос в 1м посте (удалил лишнее) 2. Изучаю Вашу ссылку. Материалов там много и они интересны. Правда, кажется не по моей проблеме. И немножко трудно (далеко ушло вперёд программирование от моей молодости) 3. Да, Ваш вариант кода тоже работает. Интересно, он: быстрее, или экономичнее, или понятнее/читабельнее, или eval - анахронизм? |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 14:58. |