Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Cookies de valores añadidos con append

Estas en el tema de Cookies de valores añadidos con append en el foro de Jquery en Foros del Web. Hola amigos y gracias de ante mano. Se trata de un input que agrega un nuevo "li" a una lista "ul" con "append()" de jquery, ...
  #1 (permalink)  
Antiguo 25/03/2015, 18:18
Avatar de mardojai  
Fecha de Ingreso: noviembre-2012
Ubicación: Lima, Perú
Mensajes: 137
Antigüedad: 12 años
Puntos: 44
Exclamación Cookies de valores añadidos con append

Hola amigos y gracias de ante mano.

Se trata de un input que agrega un nuevo "li" a una lista "ul" con "append()" de jquery,
Lo que quiero es que cuando el usuario recargue la pagina sus datos sigan, se supone que es con cookies pero no soy muy experto en ello y no se como implementarlo.

Este es mi código:

Código:
<html>
    <head>
        <script src="//code.jquery.com/jquery-1.10.2.js"></script>
        <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
        
        <script>
            $(document).ready(function(){
                $('#add_item').click(function(){    
                    var Agregar = $('input[name=Item]').val();
                    $('#list').append('<li><input type="checkbox" /><span>' + Agregar + '</span></li>');
                });
                
                $( '#list' ).on( 'click', 'input:checkbox', function () {
                    $( this ).parent().toggleClass( 'highlight', this.checked ); 
                });
                
                $('#remove_item').click(function(){    
                    $('.highlight').remove();
                });
                
                $( "#list" ).sortable();
                $( "#list" ).disableSelection();
            });          
        </script>
        <style>
            .highlight {
                background-color: yellow;
            }
        </style>
    </head>
    <body>
        <input type="text" name="Item"/>            
        
        <div id="add_item">Add</div>
        <div id="remove_item">Remove</div>
        
        <ul id="list">
        </ul>        
    </body>
</html>
__________________
El que supera a otros es poderoso, y el que se supera a sí mismo es invencible.
__________________
Si te sirvió puntúa.
  #2 (permalink)  
Antiguo 26/03/2015, 00:17
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Cookies de valores añadidos con append

Te sugiero utilizar Almacenamiento Local, que actúa como las cookies, pero con la ventaja de que puedes almacenar más datos de una manera más sencilla y segura.

La idea sería de que cuando crees un nuevo <li>, guardes los datos que contiene dicho elemento, de tal modo que cuando recargues la página, leas los datos almacenados y crees elementos <li> según la cantidad de datos almacenados.

Código Javascript:
Ver original
  1. //Cuando cargue la página, iniciamos el proceso de obtención de datos almacenados
  2. $(document).ready(function(){
  3.     //Si ya se guardaron datos localmente, se toman dichos datos
  4.     //Caso contrario, creo un nuevo objeto y lo codifico en formato JSON
  5.     localStorage.lista = localStorage.lista || JSON.stringify({contenido: []});
  6.  
  7.     //Decodifico el objeto almacenado localmente para poder interactuar con él fácilmente
  8.     var datos = JSON.parse(localStorage.lista);
  9.    
  10.     //Si hay contenido almacenado, creo tantos <li> como contenido exista
  11.     if (datos.contenido.length){
  12.         $.each(datos.contenido, function(){
  13.             $("#list").append(this);
  14.         });
  15.     }
  16.    
  17.     //Cuando cree un nuevo elemento para la lista
  18.     $("#add_item").click(function(){
  19.         var relleno = "<li><input type='checkbox' /><span>" + $("input[name=Item]").val() + "</span></li>";
  20.         $('#list').append(relleno);
  21.         datos.contenido.push(relleno); //Lo añado al array del objeto
  22.         localStorage.lista = JSON.stringify(datos); //Y lo almaceno localmente
  23.     });
  24. });

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 26/03/2015, 10:03
Avatar de mardojai  
Fecha de Ingreso: noviembre-2012
Ubicación: Lima, Perú
Mensajes: 137
Antigüedad: 12 años
Puntos: 44
Respuesta: Cookies de valores añadidos con append

Gracias por tu ayuda,

Ahora no se si me podrás ayudar con esta otra parte del código, la idea es que cuando el usuario marque una casilla se agregue un class al li y que presionando un boton todos los li con ese class se eliminen.

Lo que quiero es que las acciones de li eliminados y marcados también interaccionen con el Almacenamiento Local.

Código:
$( '#list' ).on( 'click', 'input:checkbox', function () {
                    $( this ).parent().toggleClass( 'highlight', this.checked ); 
                });
                
                $('#remove_item').click(function(){    
                    $('.highlight').remove();
                });
Por ultimo si no es mucho ya, y si es posible, quisiera que el re ordenamiento del ul con "sortable()" de Jquery ui también se guarde.

Código:
$( "#list" ).sortable();
                $( "#list" ).disableSelection();
__________________
El que supera a otros es poderoso, y el que se supera a sí mismo es invencible.
__________________
Si te sirvió puntúa.
  #4 (permalink)  
Antiguo 26/03/2015, 10:36
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Cookies de valores añadidos con append

Para retirar un elemento de un array, primero, debes de utilizar el método $.inArray de jQuery (o indexOf que es un método nativo de JavaScript) para localizar al elemento dentro del array y luego debes de usar el método splice para retirarlo.

Un ejemplo:
Código Javascript:
Ver original
  1. var array = [5, 3, 2, 8],
  2.     posicion = $.inArray(3, array);
  3.  
  4. //Si el 3 está en el array
  5. if (posicion > -1){
  6.     //Lo elimino del mismo
  7.     array.splice(posicion, 1);
  8. }

El método $.inArray (así como indexOf), devuelve la posición en el array del elemento buscado o -1 si no está, entonces, si la posición devuelta es mayor a -1, quiere decir que existe en el array y con el método splice, indico la posición del elemento a eliminar y la cantidad de elementos que se eliminarán a partir de dicha posición. Como solo deseo eliminar un elemento, coloco 1.

Una vez que hayas realizado esto, procedes a guardar la información, tal y como lo hice en el ejemplo anterior.

Para el reordenamiento, toma todo el contenido de la lista, colócalo dentro de un array y reemplázalo en el array original, de esta forma, guardarás el contenido en la forma en que quedó ordenada.

Código Javascript:
Ver original
  1. //Luego del reordenamiento
  2. var reemplazo = [$("#list").html()];
  3.  
  4. //Reemplazo el contenido
  5. datos.contenido = reemplazo;
  6.  
  7. //Y lo guardo
  8. localStorage.lista = JSON.stringify(datos);

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: append, cookies
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:17.