jQuery UI portlet - 切换portlet以保存到cookie(在那里的一半!)

时间:2010-04-15 16:10:24

标签: jquery-ui cookies portlet

我有点像jQuery n00b所以请原谅我这是不是一个愚蠢的问题。我正在使用jQuery UI创建一个站点,更具体地说是可排序的portlet。我能够存储一个portlet是否已经打开或关闭cookie。这是使用以下代码完成的。滑块ID当前是存储控件的位置,用于打开和关闭每个portlet。

     var cookie = $.cookie("hidden");
 var hidden = cookie ? cookie.split("|").getUnique() : [];
 var cookieExpires = 7; // cookie expires in 7 days, or set this as a date object to specify a date

 // Remember content that was hidden
 $.each( hidden, function(){
  var pid = this; //parseInt(this,10);
  $('#' + pid).hide();
  $("#slider div[name='" + pid + "']").addClass('add');
 })

 // Add Click functionality

 $("#slider div").click(function(){
  $(this).toggleClass('add');
  var el = $("div#" + $(this).attr('name'));
  el.toggle();
  updateCookie(el);
 });

 $('a.toggle').click(function(){
    $(this).parents(".portlet").hide();
    // *** Below line just needs to select the correct 'id' and insert as selector i.e ('#slider div#block-1') and then update cookie! ***
    $('#slider div').addClass('add');
 });

 // Update the Cookie
 function updateCookie(el){
  var indx = el.attr('id');
  var tmp = hidden.getUnique();
  if (el.is(':hidden')) {
   // add index of widget to hidden list
   tmp.push(indx);
  } else {
   // remove element id from the list
   tmp.splice( tmp.indexOf(indx) , 1);
  }
  hidden = tmp.getUnique();
  $.cookie("hidden", hidden.join('|'), { expires: cookieExpires } );
 }
}) 

// Return a unique array.
Array.prototype.getUnique = function() {
 var o = new Object();
 var i, e;
 for (i = 0; e = this[i]; i++) {o[e] = 1};
 var a = new Array();
 for (e in o) {a.push (e)};
 return a;
}

我想要做的是在每个portlet的角落添加一个[x],为用户提供另一种隐藏方式,但我目前无法使用上面的代码将其存储在Cookie中。

任何人都可以给我一个如何做到这一点的指针吗?

提前致谢!

加雷

1 个答案:

答案 0 :(得分:0)

您是否尝试在点击功能中添加其他选择器?

 $("#slider div, #slider div > span.ui-icon-x").click(function(){
  $(this).toggleClass('add');
  var el = $("div#" + $(this).attr('name'));
  el.toggle();
  updateCookie(el);
 });