Cookie がある場合はテーブルの行を非表示にする
-
23-09-2019 - |
質問
私の以前の質問に基づいて ここ そして ここ, JavaScriptでCookieを設定できることが分かりました。これをjqueryと組み合わせて、切り替えられたテーブル行にCookieの状態を設定したいと考えています。リロード時に非表示の行を非表示にしたままにしたいと考えています。
これまでに私が達成したことは次のとおりです。
// 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'));
});
});
親: <tr id="parent-1" class="container">
次の子供たち: <tr class="contained parent-1">
、など
ご覧のとおり、Cookie は読み取られますが、ブラウザーの更新時には設定されません。私の何が間違っているのでしょうか?
私が望むのは、親コンテナーがクリックされ、Cookie が設定された場合に、切り替えられた行 (クラスが親のコンテナー ID と等しい) を非表示にすることです。
ご協力をいただければ幸いです。ありがとう。
簡単なチェックに使用したソース Cookie:
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);
}
アップデート:
また、各機能を試してみましたが、うまくいきませんでした。
$('table#toggle tr.' + readCookie('togState')).each(function() {
$(this).hide();
});
更新 2:
jquery 内にチェックを入れると (私は Hide() を使用しました)、 それは動作します、 ただし、それは 1 つの Cookie のみです。それで、今の実際の問題は より多くの親行のためにより多くの Cookie を保持するにはどうすればよいですか?
解決
あなたはからこの答えをsetCookie()
機能を使用している場合に、あなたは30秒の寿命を持っているあなたのクッキーを設定しています。それはおそらくあなたの要件に十分な長さではない、とあなたはおそらくほんの少し今までそれを増やすことになります。 : - )
編集日時:あなたの質問の編集 - あなたが複数のクッキーを設定しようとしている場合は、次の行に問題があるでしょう。
document.cookie = name+"="+value+expires+"; path=/";
ここでは、cookie
プロパティあなたはsetCookie()
呼び出すたびに上書きされています。あなたが複数のクッキーを設定したい場合は、setCookie()