1

ここでの私の以前のスクリプトは、呼び出されたときに特定のdivを非表示にして表示するのに役立ちましたが、表示されるdivをCookieに記憶させたいので、ユーザーはすべてのページのリンクをクリックし続ける必要はありませんが、これまでのところjquery.cookieを取得できませんでした私のコーディングで動作するようにプラグインしてください、どんな助けでも素晴らしいでしょう。

単一ページの作業:古いコードjquery:

function language(chosenlanguage) {
 $('div[name|="lang"]').each(function(index) {
      if ($(this).attr("class") == chosenlanguage) {
           $(this).show(0);
      }
      else {
           $(this).hide(0);
      }
 });
}

古いコードhtml(hrefとdivのみで省略):

<div class="language">
<a href="javascript:language('english');">english</a>
<a href="javascript:language('spanish');">spanish</a>
<a href="javascript:language('german');">german</a>
</div>
<div name="lang" class="english" style="display:block;">content</div>
<div name="lang" class="spanish" style="display:none;">content</div>
<div name="lang" class="german" style="display:none;">content</div>

jquery.cookie.jsプラグインを使用した新しいコードは次のとおりですが、まったく何もしません。

cookieスクリプトを使用したjquery:

$(document).ready(function() { 
if($.cookie("language")) {
    $('div[name|="lang"]').each(function(index) {
      if ($(this).attr("class") == $.cookie("language")) {
           $(this).show(0);
      }
      else {
           $(this).hide(0);
      }
 });
}
$(".language a").click(function() { 
    $('div[name|="lang"]').each(function(index) {
      if ($(this).attr("class") == $(".language a").attr("name")) {
           $(this).show(0);
      }
      else {
           $(this).hide(0);
      }
 });
$.cookie("language",$('.language a').attr('name'), {expires: 365, path:      '/'});
    return false;
});
});

html(省略):

<div class="language">
<a href="javascript:language('english');" name="english">english</a>
<a href="javascript:language('spanish');" name="spanish">spanish</a>
<a href="javascript:language('german');" name="german">german</a>
</div>
<div name="lang" class="english" style="display:block;">content</div>
<div name="lang" class="spanish" style="display:none;">content</div>
<div name="lang" class="german" style="display:none;">content</div>

だから私は私が間違っているのか疑問に思っていますか?

4

1 に答える 1

2
$.cookie("language",$('.language a').attr('name'), {expires: 365, path:      '/'});
    return false;
});

常にCookieの値をに設定します。これは、常に最初のCookieの値をenglish返すためです。name<a />.languages

また、次のようにクラスを文字列と比較しない.attr('class') == langでください。代わりに、次のように使用する必要がありますhasClass.hasClass(lang)

$(".language a").click(function() { 
    $('div[name|="lang"]').each(function(index) {
      if ($(this).attr("class") == $(".language a").attr("name")) {
           $(this).show(0);
      }
      else {
           $(this).hide(0);
      }
 });

次のようになります。

$(".language a").click(function() { 
    var clicked = this;
    $('div[name|="lang"]').each(function(index) {
      if ($(this).hasClass($(clicked).attr("name"))) {
           $(this).show();
      }
      else {
           $(this).hide();
      }
    });
    $.cookie("language", $(clicked).attr('name'), {expires: 365, path: '/'});
});

divをループする前に、クリックしたアイテムを変数に保存していることに注意してください。クリックしたアイテムへの参照を取得するには、これを行う必要があります。

于 2012-04-18T01:01:47.163 に答える