jQuery y CSS - Eliminar / Agregar pantalla: ninguno


122

Tengo un div con esta clase:

.news{
  width:710px; 
  float:left;
  border-bottom:1px #000000 solid;
  font-weight:bold;
  display:none;
}

Y me gustaría con algunos métodos jQuery eliminar esa pantalla: ninguno; (para que se muestre el div) y luego agregarlo nuevamente (para que el div se sombree).

¿Cómo puedo hacerlo? Salud


3
jQuery $(".news").show()? "entonces el div se sombreará" ... ¿quieres decir que se desvanecerá?
JCOC611

Si $(".news").show()funciona! Lo mismo $(".news").hide()!!! Gracias;)
markzzz

2
Puede condensar eso en una sola declaración con$('.news').toggle();
Eli Gundry

Respuestas:


207

Para ocultar el div

$('.news').hide();

o

$('.news').css('display','none');

y para mostrar el div:

$('.news').show();

o

$('.news').css('display','block');

2
$ ('. news'). css ('display', 'block'); ¡trabajó para mi! gracias Shehal!
Jitesh Sojitra

¿Cómo restablezco el estilo de 'visualización' a lo que se configuró en CSS en primer lugar y no a 'bloquear'?
ed22

73

jQuery te proporciona:

$(".news").hide();
$(".news").show();

Luego puede mostrar y ocultar fácilmente los elementos.


38
El problema es, .show()no se elimina display: none, sino que se coloca display: blocko inlinedepende del elemento, y puede romper el diseño si el elemento usa un displayestilo inusual .
lolesque

@lolesque Encontré un simple 'truco' para solucionar ese problema. Simplemente utilícelo element{display:none;}en su CSS, pero en su JS, también utilícelo element.hide()al mismo tiempo. Esto permitirá que la show()función funcione.
Jarrod

16

Entonces, déjame darte un código de muestra:

<div class="news">
Blah, blah, blah. I'm hidden.
</div>

<a class="trigger">Hide/Show News</a>

El enlace será el disparador para mostrar el div al hacer clic. Entonces su Javascript será:

$('.trigger').click(function() {
   $('.news').toggle();
});

Casi siempre es mejor dejar que jQuery maneje el estilo para ocultar y mostrar elementos.

Editar: veo que las personas de arriba recomiendan usar .showy .hidepara esto. .togglele permite hacer ambas cosas con un solo efecto. Eso es genial.


Buena idea para mostrar la togglefunción. Muchas veces, si necesita hacer clic en algo y mostrarlo, también le gustaría que la funcionalidad lo oculte.
user3267755

16

En JavaScript:

getElementById("id").style.display = null;

En jQuery:

$("#id").css("display","");

Tuve que usar $ ("# id"). Css ('display', ''); para que funcione correctamente al eliminar el estilo en línea para "pantalla"
TrippinBilly

1
Yo también @TrippinBill (usando Mac Firefox 43) - he enviado una edición. Estas parecen ser la única forma de eliminar la propiedad CSS en lugar de revertirla. Esto le permite ser anulado por asignaciones CSS más amplias, mientras que revertirlo no lo hace.
Chris


8

Sugeriría agregar una clase para mostrar / ocultar elementos:

.hide { display:none; }

y luego use .toggleClass () de jquery para mostrar / ocultar el elemento:

$(".news").toggleClass("hide");

7

La única forma de eliminar un "display: none" en línea a través de css-api de jQuery es restableciéndolo con la cadena vacía (null NO funciona por cierto!).

Según el documento de jQuery, esta es la forma general de "eliminar" una propiedad de estilo en línea establecida una vez.

$("#mydiv").css("display","");

o

$("#mydiv").css({display:""});

debería hacer el truco correctamente.

En mi humilde opinión, falta un método en jQuery que podría llamarse "mostrar" o "revelar" que, en lugar de simplemente establecer otra propiedad de estilo en línea, desarma el valor de visualización correctamente como se describió anteriormente. O tal vez hide()debería almacenar el valor inicial en línea y show()debería restaurar eso ...


6

Las funciones .show () y .hide () de jQuery son probablemente su mejor opción.


5

No nos está dando mucha información, pero en general esta podría ser una solución:

$("div.news").css("display", "block");

¿Qué otra información necesitas? Creo que es una pregunta simple, ¿no? De todos modos, resolví usando $(".news").show()y $(".news").hide();)
markzzz

Una pregunta obvia es: ¿hay más noticias div. En la página? En cuyo caso esto los mostraría a todos.
Yorian

4

Por alguna razón, alternar no funcionó para mí, y recibí el error uncaught type error toggle is not a functional inspeccionar el elemento en el navegador. Entonces usé el siguiente código y comenzó a funcionar para mí.

$(".trigger").click(function () {
    $('.news').attr('style', 'display:none');
})

Se utilizó el archivo de script jquery jquery-2.1.3.min.js.


3

Si tiene muchos elementos que le gustaría .hide()o .show(), va a desperdiciar muchos recursos para hacer lo que quiera, incluso si usa .hide(0)o.show(0) , el parámetro 0 es la duración de la animación.

A diferencia de Prototype.js .hide() y los .show()métodos que solo se utilizan para manipular el atributo de visualización del elemento, jQuery la implementación de es más compleja y no se recomienda para una gran cantidad de elementos.

En estos casos, probablemente deberías intentar .css('display','none')esconderte y .css('display','')mostrar

.css('display','block') debe evitarse, especialmente si está trabajando con elementos en línea, filas de tabla (en realidad, cualquier elemento de tabla), etc.


1

Teniendo en cuenta el comentario de lolesque como la mejor respuesta, puede agregar un atributo o una clase para mostrar / ocultar elementos con propiedades de visualización que difieren de lo que normalmente tiene, si su sitio necesita compatibilidad con versiones anteriores, sugeriría hacer una clase y agregar / eliminar para mostrar / mostrar el elemento

.news-show {
display:inline-block;
}

.news-hide {
display:none;
}

Reemplace el bloque en línea con su método de visualización preferido de su elección y use jquerys addclass https://api.jquery.com/addclass/ y removeclass https://api.jquery.com/removeclass/ en lugar de mostrar / ocultar, si está al revés la compatibilidad no es problema, puedes usar atributos como este.

.news[data-news-visible=show] {
display:inline-block;
}

.news[data-news-visible=hide] {
display:none;
}

Y use jquerys attr () http://api.jquery.com/attr/ para mostrar y ocultar el elemento.

Cualquiera que sea el método que prefiera, podrá implementar fácilmente animaciones css3 al mostrar / ocultar elementos de esta manera


0

Usar show()anuncios display:blocken lugar de los display:hidecuales podría romper cosas.

Para evitar eso, puede tener una clase con propiedad display:noney alternar esa clase para ese elemento con toggleClass().

$("button").on('click', function(event){  $("div").toggleClass("hide"); });
.hide{
   display:none;
}

div{
   width:40px;
   height:40px;
   background:#000;
   margin-bottom:20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div></div>
<button>Toggle Box</button>

Ninguna de las respuestas mencionó esto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.