Como tornar um DIV visível e invisível com JavaScript


113

Você pode fazer algo como

function showDiv()
{
    [DIV].visible = true;
    //or something
}

1
Por que não apenas usar Jquery? .ocultar() ?
— coderama

Eu usaria isso como o nome do div, então se o div fosse chamado test, eu o faria test.hide()?

8
@JackStone: Não, isso é apenas se você já estiver usando a biblioteca jQuery. Algumas pessoas simplesmente gostam de promovê-lo em todas as questões de JavaScript. Mesmo se você fosse, .hide()não define visibilidade. Ele define a exibição.

6
@ Não sou, você claramente não entendeu que jQuery é realmente ótimo e faz todas as coisas. (Fonte da imagem)
— Pekka

8
Para algo assim, uma boa resposta deve conter uma solução JS simples e uma que mostre a vantagem de usar uma biblioteca - neste caso, não ter que lidar com inline vs block ao usar displaypara mostrar um elemento.
— ThiefMaster

Respostas:


139

se [DIV] é um elemento, então

[DIV].style.visibility='visible'

OU

[DIV].style.visibility='hidden' 

16
visibilitytem o efeito colateral de que o espaço ocupado pelo elemento permanece reservado. Isso pode ou não ser o que o OP deseja
— Pekka

1
No local onde diz [DIV], eu digitaria o nome do meu div certo?

20
Não, use em document.getElementById('id-of-the-div')vez de[DIV]
— ThiefMaster

@JackStone: Depende do que você entende por "nome" do seu div. Se for uma variável que está referenciando o div, então sim.

1
Então, se meu div fosse nome testdiv, seria document.getElementById('testdiv').style.visibility = 'hidden';?

124

Vamos supor que você não use uma biblioteca como a jQuery.

Se você ainda não tiver uma referência ao elemento DOM, obtenha uma usando var elem = document.getElementById('id');

Depois, você pode definir qualquer propriedade CSS desse elemento. Para mostrar / ocultar, você pode usar duas propriedades: displaye visibility, que têm efeitos ligeiramente diferentes:

O ajuste style.displayparecerá como se o elemento não estivesse presente ("removido").

elem.style.display = 'none'; // hide
elem.style.display = 'block'; // show - use this for block elements (div, p)
elem.style.display = 'inline'; // show - use this for inline elements (span, a)

ou style.visibilityfará com que o div ainda esteja lá, mas seja "todo vazio" ou "todo branco"

elem.style.visibility = 'hidden'; // hide, but lets the element keep its size
elem.style.visibility = 'visible';

Se estiver usando jQuery, você pode fazer isso ainda mais fácil, desde que queira definir a displaypropriedade:

$(elem).hide();
$(elem).show();

Ele usará automaticamente o displayvalor apropriado ; você não precisa se preocupar com o tipo de elemento (embutido ou bloco). Além disso, elemnão pode ser apenas um elemento DOM, mas também um seletor, como #idou .classou qualquer outra coisa que seja CSS3 válida (e muito mais!).


Prefiro sua resposta, mas acho que há uma pequena correção que você deve usar elem.style.display = 'none';
— Saumil


29

Você pode usar visibilityou, displaymas deve aplicar alterações ao div.styleobjeto e não ao divobjeto em si.

var div = document.getElementById('div_id');

// hide
div.style.visibility = 'hidden';
// OR
div.style.display = 'none';

// show
div.style.visibility = 'visible';
// OR
div.style.display = 'block';

div.style.visibility = falsenão funciona para mim no Chrome. E a trueparte parece estar funcionando mais por acidente porque desarruma a propriedade (embora não seja meu voto negativo)
— Pekka

Nem displaynem visibilitysão propriedades boolean. Além disso, nonee blockprecisam ser citados por serem strings ..
— ThiefMaster

valores errados para os rótulos. Isso funciona agora e não, não vou mexer nisso, é muito simplista.
— zellio

4

Você pode usar as funções DOM: setAttribute e removeAttribute. No link a seguir você tem um exemplo de como usá-los.

funções setAttribute e removeAttribute

Uma visão rápida:

hide:    document.getElementById("myDiv").setAttribute("hidden","");
unhide:  document.getElementById("myDiv").removeAttribute("hidden");

2
Você pode melhorar sua resposta? Com exemplos e explicações.
— Gaël Barbin

1

Você pode usar o opacityqual é semelhante a, visibility mas permite suavizar a transição e controlar outros parâmetros como altura (para simplificar o snippet, coloquei a lógica js em html diretamente - não faça isso no código de produção)


0

Use o atributo 'oculto' do elemento DOM:

function showDiv(isVisible)
{
    [DIV].hidden = !isVisible;
}

0

Tornar invisível usando CSS

#div_id {
        /*height: 400px;*/
         visibility:hidden;
    }

Torne visível usando Javascript

document.getElementById('div_id').style.visibility = 'visible';
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.