【发布时间】:2013-08-04 17:24:19
【问题描述】:
让我们假设一个这样的 HTML 结构:
<div id="relevantHeadings">
<h1>First Heading</h1>
<h2>First Subheading</h2>
<div>
<!-- for clarification that the headings are not necessarily siblings -->
<h2>Second Subheading</h2>
</div>
<h1>Second Heading</h1>
<h1>Third Heading</h1>
<h1>Fourth Heading</h1>
<h2>Third Subheading</h2>
<h1>Fith Heading</h1>
</div>
编辑:标题不一定是彼此的兄弟。
我需要的是这个:
'menu': {
'level':[
{
'label': 'First Heading',
'level' :[
{
'label': 'First Subheading'
},
{
'label': 'Second Subheading'
}]
},
{
'label': 'Second Heading'
},
{
'label': 'Third Heading'
},
{
'label': 'Fourth Heading',
'level' :[
{
'label': 'Third Subheading'
}]
},
{
'label': 'Fith Heading'
}]
}
我的实际代码比label 具有更多的属性和更多的维度/级别。
到目前为止,我已经尝试了很多次,但我不知道如何正确地将子数组推送到数组的一项中:
this.allHeadings = $('#relevantHeadings').find('h1, h2, h3, h4, h5, h6');
this.obj = {};
this.obj['level'] = [];
this.allHeadings.each(function(i) {
if($(this).is('h1')) {
thiz.obj['level'].push(this);
} else if($(this).is('h2')) {
// create and push this one into thiz.obj['level'][i-1]['level']
}
});
【问题讨论】:
-
不是我需要的。我可能应该在前面提到这一点 - 构建导航的脚本已经完成。它从 JSON 结构构建导航。现在我需要编写一个脚本,将我的 DOM 转换为那个 JSOn 结构。提供的链接跳过了整个 JSON 过程,这对我来说是不可能的
-
当然可以,但是调整脚本以使用 JSON 树而不是 DOM 树很简单。
-
正如我所说:我的用例要复杂得多。大多数时候 JSON 结构是由一些服务器端脚本给出的,我只需要处理它。从 DOM 构建导航的选项只是当前脚本的一个选项,因此有必要首先构建 JSON 结构。 (巨大的项目,巨大的公司,不能改变前提:-()
-
不,从 DOM 构建 json 结构并不比从 DOM 构建导航结构更复杂。算法是一样的。
标签: jquery arrays multidimensional-array