我有以下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]);我得到了不确定。
谢谢
答案 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/