Esconder linhas de mesa se o biscoito estiver lá
-
23-09-2019 - |
Pergunta
Com base na minha pergunta anterior aqui e aqui, Descobri que posso definir um cookie com JavaScript. Quero combiná -lo com o jQuery para ter um estado de biscoito definido para linhas de mesa alternadas. Eu quero manter as linhas escondidas escondidas na recarga.
Aqui está o que consegui até agora:
// Load cookies if any
if(readCookie('togState')) {
$('table#toggle tr.' + readCookie('togState')).hide();
}
$(function() {
$('table#toggle tr.container').click(function() {
var idTog = $(this).attr('id');
$(this).toggleClass('off').nextAll('.' + idTog).toggle();
setCookie('togState', idTog, 30);
alert('Cookies: ' + readCookie('togState'));
});
});
O pai: <tr id="parent-1" class="container">
Os seguintes filhos: <tr class="contained parent-1">
, etc.
Como você pode ver, o cookie é lido, mas não está definido na atualização do navegador. O que estou fazendo errado?
O que eu quero é ocultar quaisquer linhas alternadas (tendo suas classes iguais ao ID do contêiner dos pais), se o contêiner pai for clicado e, portanto, o cookie estiver definido.
qualquer ajuda seria muito bem vinda. Obrigado.
O cookie de origem que usei para verificação rápida:
function setCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
setCookie(name,"",-1);
}
ATUALIZAR:
Eu também tentei cada função sem sorte:
$('table#toggle tr.' + readCookie('togState')).each(function() {
$(this).hide();
});
Atualização 2:
Se eu fizer o cheque dentro do jQuery (usei Hide ()), funciona, Mas apenas para um único biscoito. Então o problema real agora é Como manter mais cookies para mais linhas dos pais?
Solução
Se você está usando o setCookie()
função de esta resposta, você está definindo seu cookie para ter uma vida inteira de 30 segundos. Provavelmente, isso não é o suficiente para seus requisitos, e você provavelmente deve aumentar o aumento de isso um pouco. :-)
EDITAR Re: sua pergunta Editar - Se você está tentando definir vários cookies, terá um problema com a seguinte linha:
document.cookie = name+"="+value+expires+"; path=/";
Aqui, você está substituindo o cookie
propriedade toda vez que você liga setCookie()
. Se você deseja definir vários cookies, precisar setCookie()