使用jquery cookie插件在回发之间保持节点状态

时间:2012-06-28 09:16:11

标签: javascript jquery

我有以下html表

   <table id="{64ED3A94-5833-4CC7-869F-CCE583B498BE}" class="ms-listviewtable"
            width="100%" cellspacing="0" cellpadding="1" border="0" 
            xmlns:o="urn:schemas-microsoft-com:office:office" dir="none">
       <tbody id="tbod23-1__" isloaded="true" style="display: none;"></tbody>
       <tbody id="tbod23-2__" isloaded="true" style=""></tbody>
       <tbody id="tbod23-3__" isloaded="true" style="display: none;"></tbody>
       <tbody id="tbod23-4__" isloaded="true" style=""></tbody>
       <tbody id="tbod23-5__" isloaded="true" style="display: none;"></tbody>
       <tbody id="tbod23-6__" isloaded="true" style="display: none;"></tbody>
       <tbody id="tbod23-7__" isloaded="true" style="display: none;"></tbody>
    </table>

此表由sharepoint xsltlistviewwebpart自动生成(在sharepoint中没有发布,因为问题更多是jquery + html相关)。

这是一个带有节点的树视图,当我展开折叠节点时,它会改变样式

style="display: none;" 

style=""

问题:webpart不记得哪些节点已折叠,因此在每次回发时它会重置所有要扩展的节点。我需要做的是记住jquery cookie中的节点状态(展开或折叠),并在回发时检索它(因此,要保持节点状态)。

到目前为止,我得到了:

<script type="text/javascript">
_spBodyOnLoadFunctionNames.push("RememberClickedState");

function RememberClickedState()
{
var dv = $('.ms-listviewtable');
var items = [];
items = dv.find('tbody[id^="tbod"]');
$.cookie("itemListState", items);
    alert(items[0]);
    alert(items[1]);
 }

 </script>

任何人都可以提供一些指导如何做到这一点。我对事件本身有点茫然和困惑,在page_load上我应该保存cookie但也以某种方式检索它。

同样“items”数组存储了所有7个元素,这是好的,但当我尝试alert(items [0]);我得到了不确定。

谢谢

1 个答案:

答案 0 :(得分:1)

我建议你创建这个字符串,然后再解析这个字符串...有点像:

var items = '';
function RememberClickedState() {
    $('.ms-listviewtable tbody').each(function(){
        tid = $(this).attr('id');
        tvisible = $(this).is(':visible');
        items += tid+':'+tvisible+','
    })
    //$.cookie("itemListState", items);
    $('body').append(items+'<br/>');
}
function RestoreClickedState() {
    //string = $.cookie("itemListState")
    var string = items; //temporary
    var cookies = string.split(',');
    $.each(cookies, function(i, val){
        val = val.split(':');
        show = (val[1] == 'true' ? true:false);
        item = $('.ms-listviewtable').find('#'+val[0]);
        show ? item.show() : item.hide();
        $('body').append('#'+val[0]+' is '+ 'display:'+show+'<br/>');
    })
}
$(document).ready(function(){
    RememberClickedState();
    RestoreClickedState();
})

这是DEMO: http://jsfiddle.net/MYexv/3/