0

我有以下 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>

此表由共享点 xsltlistviewwebpart 自动生成(由于问题与 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]); 我不确定。

谢谢

4

1 回答 1

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();
})

这是演示:http: //jsfiddle.net/MYexv/3/

于 2012-06-28T09:51:27.040 回答