La eliminación de datos elimina por completo el elemento. En su lugar, use el método .hide () de jQuery.
El método de arreglarlo rápido:
Usando javascript en línea para ocultar el elemento al hacer clic así:
<div class="alert" style="display: none">
<a class="close" onclick="$('.alert').hide()">×</a>
<strong>Warning!</strong> Best check yo self, you're not looking too good.
</div>
<a href="#" onclick="$('alert').show()">show</a>
http://jsfiddle.net/cQNFL/
Sin embargo, esto solo debe usarse si eres vago (lo cual no es bueno si quieres una aplicación que se pueda mantener).
El método de hacerlo bien:
Cree un nuevo atributo de datos para ocultar un elemento.
Javascript:
$(function(){
$("[data-hide]").on("click", function(){
$("." + $(this).attr("data-hide")).hide()
// -or-, see below
// $(this).closest("." + $(this).attr("data-hide")).hide()
})
})
y luego cambie el descarte de datos a ocultar datos en el marcado. Ejemplo en jsfiddle .
$("." + $(this).attr("data-hide")).hide()
Esto ocultará todos los elementos con la clase especificada en data-hide, es decir: data-hide="alert"
ocultará todos los elementos con la clase de alerta.
Xeon06 proporcionó una solución alternativa:
$(this).closest("." + $(this).attr("data-hide")).hide()
Esto solo ocultará el elemento padre más cercano. Esto es muy útil si no desea asignar a cada alerta una clase única. Sin embargo, tenga en cuenta que debe colocar el botón de cierre dentro de la alerta.
Definición de .closest de jquery doc :
Para cada elemento del conjunto, obtenga el primer elemento que coincida con el selector probando el elemento en sí y recorriendo sus antepasados en el árbol DOM.
alert
) en la página. Una solución para esto sería reemplazar el contenido de la devolución de llamada con esta línea$(this).closest("." + $(this).attr("data-hide")).hide();
, que solo afectará al elemento principal más cercano, ya que el botón de descarte generalmente se coloca dentro de la alerta que afecta.