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.