在jquery中使用localstorage时,.css不是函数错误

时间:2018-05-22 08:54:32

标签: jquery html

实际上我已经创建了一个导航标签。我想要的是导航标签的点击div应该从白色变为黑色背景,即使刷新后也应该保持黑色,直到点击任何其他标签。

我尝试了下面的代码,但它会抛出错误,说'.css不是函数'。

$(document).ready(function() {
  if (localStorage.getItem("clicked")) {
    var clickedtab = localStorage.getItem("clicked");
    clickedtab.css(‘background’, ’black’);
  } else {
    $("#home").css('background', ’black’);
  }
  $("#home").click(function() {
    localStorage.setItem('clicked', $(this).attr(‘id’));
  });
  $("#profile").click(function() {
    localStorage.setItem('clicked', $(this).attr(‘id’));
  });
  $("#notifs").click(function() {
    localStorage.setItem('clicked', $(this).attr(‘id’));
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="menu">
  <div id="home" class="menu_align active_one">Home</div>
  <div id="profile" class="menu_align">Profile</div>
  <div id="notifs" class="menu_align">Notifications</div>
</div>

1 个答案:

答案 0 :(得分:1)

首先请注意您的代码中有几个无效引号。 需要替换为'。还要确保您使用的双引号也有效;它们应该只是"

您的逻辑问题是因为您从localStorage检索的clickedtab值是之前点击的id的{​​{1}} 字符串。您需要从中创建一个jQuery对象,以便在该元素上调用jQuery方法,例如div

为此,您可以将css()连接到选择器,并将其作为jQuery对象的参数提供。如果localStorage中没有任何内容,也可以通过使用公共类来选择id元素,而不是重复相同的单击处理程序N次,也可以通过向选择器提供默认值来简化逻辑。试试这个:

div
$(document).ready(function() {
  var activetab = localStorage.getItem("clicked") || 'home';
  $('#' + activetab).css('background', 'black');

  $(".menu div").click(function() {
    localStorage.setItem('clicked', this.id);
  });
});

Working example

请注意,工作示例位于Fiddle中,因为SO Snippets对访问localStorage有限制。