Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Скрытие всех элементов (https://javascript.ru/forum/dom-window/3280-skrytie-vsekh-ehlementov.html)

rkit 03.04.2009 06:13

Скрытие всех элементов
 
Здравствуйте, скажите пожалуйста, можно ли на javascript
скрыть все элементы, ID`ы, которых, начинаются к примеру на show_

Допустим:

<div id="show_1">...</div>
<div id="show_2">...</div>
<div id="show_3">...</div>
<div id="show_4">...</div>
<div id="show_5">...</div>
<div id="show_6">...</div>

Kolyaj 03.04.2009 08:44

Им можно присвоить класс
<div class="block">...</div>
<div class="block">...</div>
<div class="block">...</div>
<div class="block">...</div>
<div class="block">...</div>

В стилях написать
Код:

.hideblock .block {
    display: none;
}

Теперь, чтобы скрыть все блоки, нужно указать какому-нибудь родительскому элементу, например, body класс hideblock.
document.body.className = 'hideblock';


Это самое оптимальное решение.

rkit 03.04.2009 10:59

А если надо при это оставить один из них видимым?
Допустим скрыть все кроме show_4

Kolyaj 03.04.2009 11:04

Это уже совсем другой вопрос. И будет лучше, если вы все последующие тоже сразу изложите. Зря писать не больно охота.

В любом случае тупой метод в лоб вам поможет: перебрать в цикле все элементы и скрыть нужные.

rkit 03.04.2009 11:44

Пардон что сразу не сказал.

Перебрать в цикле - это понятно...
Просто думал может другой способ есть.
В любом случаи спасибо за ответы.

Kolyaj 03.04.2009 11:46

Цитата:

Сообщение от rkit
Просто думал может другой способ есть.

Всегда есть. Но вы же не говорите, что вам надо, поэтому способов не узнаете.

rkit 03.04.2009 12:02

Мне нужно скрыть все элементы, id`ы которых начинаются на show_, но при этом, оставить один из них видимым (допустим show_4)

Есессно разное кол-во элементов всегда.

Gvozd 03.04.2009 12:34

перебором
почитайте эту тему

rkit 03.04.2009 12:47

Спасибо. Буду разбираться.

PAULUS 05.04.2009 00:47

А как быть с нерегулярными ID ?
 
Как поступить, если ID всех скрытых (да и видимых) div`ов имеет текстовые, понятные смысловые названия (ford, fiat, more, ogurets). Причем имена невидимых ID отличаются от предшествующих им лишь нижним прочерком,
т.е. видимая
<a id='ogurets'...onclick=expand('_ogurets')>, невидимая соответственно
div id='_ogurets'.
Открывается функцией, в которой при onclick поочередно меняется document.getElementById(termin).style.display = 'block' и 'none'
Это сделано для навигации внутри докумнета, а также при открывании ссылки в новом окне (используется hash), при этом в новом окне переходим на соответствующую метку и раскрываем следующий за ней блок, т.к. ID этого блока образуется путем прибавления нижнего прочерка к hash.
Вопрос вот какой: как сделать, чтобы при onclick на странице развернуть/свернуть все ID, начинающиеся с нижнего прочерка?

Gvozd 05.04.2009 01:44

вам нужно такое, я так понимаю
pre_elem=document.getElementsByTagName('*');//замените * на конкретные теги, если они одинаковы.если нет, то остваьте как есть
j=0;
for(i=0;i<pre_elem.length;i++){
if(pre_elem[i].id[0]=='_'){
elem[j++]=pre_elem[i];
}
}
elem;//все элементы, чей ID начинается с '_'

x-yuri 05.04.2009 03:47

Цитата:

Вопрос вот какой: как сделать, чтобы при onclick на странице развернуть/свернуть все ID, начинающиеся с нижнего прочерка?
чем не устраивает http://javascript.ru/forum/dom-windo...html#post15821

PAULUS 05.04.2009 23:03

Большое спасибо, Gvozd.

To x-yuri:

Не пробовал конечно, бесспорно удобно, тем более у меня в каждом раскр блоке помимо разных ID еще одинкаовый class стоИт. Просто есть небольшое опасение в корректности мультибраузерной работы, и в частности, чтобы class всегда переплевывал ID(когда некоторые ID уже развернуты). Но наверное этот вариант тоже должен подойти, на досуге попробую. Спасибо.

Kolyaj 06.04.2009 12:07

Цитата:

Сообщение от PAULUS
Просто есть небольшое опасение в корректности мультибраузерной работы

И откуда такие опасения?

Цитата:

Сообщение от PAULUS
и в частности, чтобы class всегда переплевывал ID(когда некоторые ID уже развернуты)

class никогда не переплевывает id, просто грамотно стили писать надо.

PAULUS 08.04.2009 15:32

Рапортую:
Способ
document.body.className = 'hideblock';
в моем случае не подошел из-за сложности громоздкости наслоения вариантов сочетаний значений body class и локальных ID div-элементов (появилась необходимость при изменении body class одновременно менять значение ID div-элементов, в ином случае требовались повторные нажатия при открыть/скрыть конкретный div, т.е. в любом случае потребовался способ, предложенный Gvozd).
Предложенный Gvozd способ в первоначальном виде работал в Opera и Firefox, но не работал в IE, поэтому потребовалось
if(pre_elem[k].id[0]=='_')
заменить на if(pre_elem[k].id.charAt(0) =='_')
Сейчас работающий код выглядит так:

var SHOF_key='none';
function SHOF(){
pre_elem=document.getElementsByTagName('div');
if (SHOF_key != 'block') SHOF_key = 'block';
else SHOF_key = 'none';
for(k=0;k<pre_elem.length;k++){
if(pre_elem[k].id.charAt(0) =='_'){
document.getElementById(pre_elem[k].id).style.display = SHOF_key;
                                          }}}


Большое спасибо Gvozd и всем участвующим.


Часовой пояс GMT +3, время: 20:56.