<%= title %> <%= author %> <% var playOrder = 1; // 构建层级结构 var hierarchicalContent = []; var currentParent = null; content.forEach(function(item, index) { if (!item.excludeFromToc && !item.beforeToc) { // 检查是否是顶级章节(level 0 或没有 parentTitle) if (item.level === 0 || !item.parentTitle) { // 开始新的父章节 currentParent = { title: item.title, href: item.href, level: 0, number: item.number, children: [] }; hierarchicalContent.push(currentParent); } else if (item.level === 1 && currentParent) { // 添加到当前父章节的子项 currentParent.children.push({ title: item.title, href: item.href, level: 1, number: item.number }); } else { // 其他情况,作为独立章节 hierarchicalContent.push({ title: item.title, href: item.href, level: item.level || 0, number: item.number, children: [] }); } } }); // 渲染嵌套的导航点 function renderNavPoint(chapter, depth) { var id = "navpoint_" + playOrder; var href = chapter.href; var title = chapter.title || 'Untitled'; var children = chapter.children || []; var number = chapter.number; var level = chapter.level || 0; var currentOrder = playOrder++; // 对于顶级章节(level 0),标题已经包含"第X章",不需要再加编号 // 只对子章节(level 1)添加编号 var displayTitle = (level === 1 && number ? number + ' ' : '') + title; var result = ' \n'; result += ' \n'; result += ' ' + displayTitle.replace(/&/g, '&').replace(//g, '>') + '\n'; result += ' \n'; result += ' \n'; // 递归渲染子章节 if (children.length > 0) { children.forEach(function(child) { result += renderNavPoint(child, depth + 1); }); } result += ' \n'; return result; } // 渲染所有导航点 hierarchicalContent.forEach(function(chapter) { %><%- renderNavPoint(chapter, 0) %><% }); %>