如何将每个ul> li项的类作为串行字符串?

时间:2011-03-23 19:26:04

标签: jquery

我正在尝试获取无序列表中每个项目的类,并将其转换为序列化字符串,可以作为AJAX调用发回。

经过一天乱搞jQuery(我喜欢但不太熟悉 - 似乎比服务器端的东西更难),我仍然没有进一步。任何人都可以提供一些指示吗?

类似

<ul>
    <li class="expanded">Some text</li>
    <li class="expanded">Some text</li>
    <li>Some text</li>
    <li>Some text</li>
    <li class="expanded">Some text</li>
</ul>

会产生类似

的字符串
1,1,0,0,1

易于存储和解析。


我最终要做的是创建一个具有以下特征的可扩展列表:

  • 点击某个条目取消隐藏div
  • 可以同时打开多个项目,即不是手风琴系统
  • 保持状态,最好在进行更改时通过Ajax调用,但客户端cookie是可接受的(例如,会发送类似'0,1,1,0,0'的字符串,意味着项目2和3打开​​)

我一直在

使用优秀的例子#3

中记录的

http://www.i-marco.nl/weblog/jquery-accordion-3/

http://www.i-marco.nl/weblog/archive/2010/02/27/yup_yet_another_jquery_accordi

作者说“你可以通过让你的页面生成代码设置这个类来控制手风琴的状态”,但遗憾地没有提供如何将状态输出的指示。

有人可以建议如何做到这一点的积极策略吗?

我试图遍历每个项目来获取类,以便序列化项目索引列表 - 我想像

var target = $('ul.menu > li.active');
$.each(target, function(index, attributes) {
    alert(attributes.attr('class'));
});

可能是一个开始,但尝试不同的事情的时间甚至没有让我那么远 - 只列出当前状态。

1 个答案:

答案 0 :(得分:3)

你的意思是这样的吗?

var status = $('ul > li').map(function() {
     return +$(this).hasClass('expanded');
}).get().join(',');

这将创建一个01的数组,并将其与,连接以创建字符串。

注意:我使用一元+truefalse转换为数字表示形式10

参考: jQuery.fn.mapjQuery.fn.hasClassjQuery.fn.getArray.prototype.join