как сбросить видимость нескольких объектов сразу
Приветствую,
Есть список объектов со своими id, видимость которых попеременно переключается. Соответственно другие, кроме нужного приходиться сбрасывать. Сейчас делаю это весьма громоздкой кострукцией: function mk1() { document.all.mark1.style.display=''; document.all.mark2.style.display='none'; document.all.mark3.style.display='none'; document.all.mark4.style.display='none'; ... document.all.mark66.style.display='none'; document.all.mark67.style.display='none'; } ... ... function mk67() { document.all.mark1.style.display='none'; document.all.mark2.style.display='none'; document.all.mark3.style.display='none'; document.all.mark4.style.display='none'; ... document.all.mark66.style.display='none'; document.all.mark67.style.display=''; } Понятно, что при увеличении числа объектов код растет с геометрической прогрессией. В результате файл со скриптом уже весит 200 Кб. Вопрос: Как заменить несколько инструкций по выключению видимости всех объектов (кроме нужного) на одну? |
сразу замечу что использование document.all является плохим, вследствии некросбраузерности, и проблем с name
теперь же по сути function qwe(num=1) { var max=67; if(num>max) { for(i=1;i<=max;i++) document.getElementById('mark'+i).style.display='none'; return; } for(i=1;i<num;i++) document.getElementById('mark'+i).style.display='none'; document.getElementById('mark'+i).style.display=''; for(i++;i<=max;i++) document.getElementById('mark'+i).style.display='none'; } |
Передавайте в функцию аргументом элемент который нужно показать, а остальные скрывайте в цыкле.
И не используйте конструкцию document.all (она будет работать только в IE), лучше используйте document.getElementById('mark1') и т.д. Добавлено: пока писал, ответили. |
Цитата:
еще работает в опере(по крайней мере старых версиях), и можно заставить в мозилле пахать. но смысла в этих изварщениях нету. ибо в all еще пихается по name-у |
Большое спасибо, насчет цикла не подумал )) Но вот проблем с кроссбраузерностью пока не было, совсем. Наверное потому, что использую id, а не name.
|
все же бы следовало бы использовать именно document.getElementById()
вы свой код везде проверяли? он не запашет в мозилле(в завизимости от заголовка документа) и скорее всего не запашет в хроме |
В IE, Opera, Mosilla, Netscape работает ок. До других пока просто руки не дошли )) Но попробую все же перейти на getElementById(), еще раз спасибо.
|
Просто document.all - это IE 4 DOM, ну в некоторые браузеры котоыре хотят поспеть везде (такие как опера), добавили поддержку. Но это не праивльно :) как уже сказали не раз.
|
Ну вот, скрипт весил 200 Кб, теперь 200 байт )) Все браузеры съели на ура...
function mk(num) { max=67; for(i=1;i<=max;i++) { if (i==num) { document.getElementById('mark' + i).style.display=''; } else { document.getElementById('mark' + i).style.display='none'; } } } |
Так будет работать быстрее:
function mk(num) { for(var i=1;i<=67;i++) document.getElementById('mark' + i).style.display='none'; document.getElementById('mark' + num).style.display=''; } |
Часовой пояс GMT +3, время: 14:00. |