【问题标题】:jquery cookies and div style display block/nonejquery cookie 和 div 样式显示块/无
【发布时间】:2012-04-18 16:26:02
【问题描述】:

我之前的脚本在调用时隐藏和显示某些 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>

所以我只是想知道我做错了什么?

【问题讨论】:

  • 你有一个 &lt;div class='language'&gt; 包装你的 HTML 吗? ...您是否关闭了 &lt;a... 标签?这可能会有所帮助。
  • 是的,对不起,我忘了在编码框中添加它

标签: jquery html jquery-cookie


【解决方案1】:
$.cookie("language",$('.language a').attr('name'), {expires: 365, path:      '/'});
    return false;
});

始终将 cookie 的值设置为 english,因为这始终返回 .languages 中第一个 &lt;a /&gt;name

另外,你不应该这样比较类和字符串:.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 之前,我将点击的项目保存在变量中,您需要这样做才能引用点击的项目

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2022-11-23
  • 2013-10-06
  • 1970-01-01
相关资源
最近更新 更多