Как сделать видимость от 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, время: 23:08. |