Javascript 如何使用jQuery根据标题自动生成菜单/内容?
在包含一些信息的基本XHTML文档中,我希望有一个“快速跳转”类型的部分菜单,以便能够快速转到相关部分 这是一个静态XHTML文档,所以我希望所有动态内容都由浏览器完成,而不是服务器。我认为jQuery是一条出路 我看过jQueryUI的东西,手风琴是我能找到的最接近的东西,但我不希望这些部分被折叠掉——我希望所有的内容都显示出来,只有一个浮动的内容/菜单 由此:Javascript 如何使用jQuery根据标题自动生成菜单/内容?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,在包含一些信息的基本XHTML文档中,我希望有一个“快速跳转”类型的部分菜单,以便能够快速转到相关部分 这是一个静态XHTML文档,所以我希望所有动态内容都由浏览器完成,而不是服务器。我认为jQuery是一条出路 我看过jQueryUI的东西,手风琴是我能找到的最接近的东西,但我不希望这些部分被折叠掉——我希望所有的内容都显示出来,只有一个浮动的内容/菜单 由此: <h2>Section 1</h2> <p>Some information</p>
<h2>Section 1</h2>
<p>Some information</p>
<h2>Section 2</h2>
<p>More great info</p>
第1节
一些信息
第二节
更多精彩信息
我想制作一些类似于:
<ul id="menu">
<li><a href="#section1">First section</a></li>
<li><a href="#section2">Another section</a></li>
</ul>
<a name="section1"><h2>First section</h2></a>
<p>Some information</p>
<a name="section2"><h2>Another section</h2></a>
<p>More great info</p>
第一节
一些信息
另一部分
更多精彩信息
我不介意在div中用一个类或类似的类来包装每个单独的部分,但是我希望这个过程尽可能自动化,所以我只需要在修改文档时更改实际内容
有什么想法吗
谢谢,F.如果您只想调用一个函数来自动创建包装器,您可以执行以下操作:
<ul id="menu"></ul>
<div id="sectionInfo"></div>
function addSection(name, anchor, info) {
$("#menu").append("<li><a href='" + anchor+ "'>" + name + "</a></li>");
$("#sectionInfo").append("<a name='" + anchor + "'><h2>" + name + "</h2></a><p>" + info + "</p>");
}
<ul id="menu"></ul>
<div id="content"></div>
<div id='sections' style='display:none;'>
<div>
<h2>Section 1</h2>
<p>Some information</p>
</div>
<div>
<h2>Section 2</h2>
<p>More great info</p>
</div>
</div>
编辑
然后,您可以扩展它以在加载文档时遍历文档,从而自动调用这个“addSection”函数
您需要使用更为刚性的结构定义截面,以便更容易进行遍历。我建议这样做:
<ul id="menu"></ul>
<div id="sectionInfo"></div>
function addSection(name, anchor, info) {
$("#menu").append("<li><a href='" + anchor+ "'>" + name + "</a></li>");
$("#sectionInfo").append("<a name='" + anchor + "'><h2>" + name + "</h2></a><p>" + info + "</p>");
}
<ul id="menu"></ul>
<div id="content"></div>
<div id='sections' style='display:none;'>
<div>
<h2>Section 1</h2>
<p>Some information</p>
</div>
<div>
<h2>Section 2</h2>
<p>More great info</p>
</div>
</div>
然后,加载页面后,循环浏览已定义的部分并调用addSection(),将其内容转换为您想要的样子:
<script>
$(document).ready(function() {
$("#sections div").each(function() {
addSection($(this).find("h2").first().html(), $(this).find("p").first().html());
});
});
function addSection(name, info) {
var anchor = name.replace(/ /g,'');
$("#menu").append("<li><a href='" + anchor+ "'>" + name + "</a></li>");
$("#content").append("<a name='" + anchor + "'><h2>" + name + "</h2></a><p>" + info + "</p>");
}
</script>
$(文档).ready(函数(){
$(“#节分区”)。每个(函数(){
addSection($(this.find(“h2”).first().html(),$(this.find(“p”).first().html());
});
});
函数addSection(名称、信息){
var anchor=name.replace(//g',);
$(“#菜单”)。追加(“”);
$(“#内容”)。追加(“+name+”“+info+””);
}
此代码未经测试,但该概念应该有效。您可以通过移动元素而不是复制它们的HTML来提高效率。如果您只想调用一个函数来自动创建包装器,您可以执行以下操作:
<ul id="menu"></ul>
<div id="sectionInfo"></div>
function addSection(name, anchor, info) {
$("#menu").append("<li><a href='" + anchor+ "'>" + name + "</a></li>");
$("#sectionInfo").append("<a name='" + anchor + "'><h2>" + name + "</h2></a><p>" + info + "</p>");
}
<ul id="menu"></ul>
<div id="content"></div>
<div id='sections' style='display:none;'>
<div>
<h2>Section 1</h2>
<p>Some information</p>
</div>
<div>
<h2>Section 2</h2>
<p>More great info</p>
</div>
</div>
编辑
然后,您可以扩展它以在加载文档时遍历文档,从而自动调用这个“addSection”函数
您需要使用更为刚性的结构定义截面,以便更容易进行遍历。我建议这样做:
<ul id="menu"></ul>
<div id="sectionInfo"></div>
function addSection(name, anchor, info) {
$("#menu").append("<li><a href='" + anchor+ "'>" + name + "</a></li>");
$("#sectionInfo").append("<a name='" + anchor + "'><h2>" + name + "</h2></a><p>" + info + "</p>");
}
<ul id="menu"></ul>
<div id="content"></div>
<div id='sections' style='display:none;'>
<div>
<h2>Section 1</h2>
<p>Some information</p>
</div>
<div>
<h2>Section 2</h2>
<p>More great info</p>
</div>
</div>
然后,加载页面后,循环浏览已定义的部分并调用addSection(),将其内容转换为您想要的样子:
<script>
$(document).ready(function() {
$("#sections div").each(function() {
addSection($(this).find("h2").first().html(), $(this).find("p").first().html());
});
});
function addSection(name, info) {
var anchor = name.replace(/ /g,'');
$("#menu").append("<li><a href='" + anchor+ "'>" + name + "</a></li>");
$("#content").append("<a name='" + anchor + "'><h2>" + name + "</h2></a><p>" + info + "</p>");
}
</script>
$(文档).ready(函数(){
$(“#节分区”)。每个(函数(){
addSection($(this.find(“h2”).first().html(),$(this.find(“p”).first().html());
});
});
函数addSection(名称、信息){
var anchor=name.replace(//g',);
$(“#菜单”)。追加(“”);
$(“#内容”)。追加(“+name+”“+info+””);
}
此代码未经测试,但该概念应该有效。您可以通过移动元素而不是复制它们的HTML来提高效率。听起来像是在寻找一段JavaScript,它根据选择器的结果生成内容。也不需要任何幻想来完成:
函数buildSectionAnchoreElement(索引、标题){
变量a=$(“”);
var name=“section”+索引;
$(标题).attr(“名称”,名称);
a、 属性(“href”,“#”+名称);
a、 文本($(标题).text());
返回a;
}
风险值标题=$(“h1、h2、h3、h4”);
var sections=headers.map(函数(i,e){
var a=建筑节锚固构件(即e);
var p=$(e).下一个(“p”);
var li=$(“”);
li.附加(a);
$(“#菜单”)。追加(li);
返回李;
});代码>
dolor kismet aha bwaha
特别的东西
同侧眼睑
不同的东西
听起来像是在寻找一段JavaScript,它根据选择器的结果生成内容。也不需要任何幻想来完成:
函数buildSectionAnchoreElement(索引、标题){
变量a=$(“”);
var name=“section”+索引;
$(标题).attr(“名称”,名称);
a、 属性(“href”,“#”+名称);
a、 文本($(标题).text());
返回a;
}
风险值标题=$(“h1、h2、h3、h4”);
var sections=headers.map(函数(i,e){
var a=建筑节锚固构件(即e);
var p=$(e).下一个(“p”);
var li=$(“”);
li.附加(a);
$(“#菜单”)。追加(li);
返回李;
});代码>
dolor kismet aha bwaha
特别的东西
同侧眼睑
不同的东西
谢谢,但挑战在于如何让jQuery(或只是带DOM的纯js)遍历文档,在部分和菜单中的链接上生成锚名称。您的addSection()建议仍然需要我(程序员)了解文档的内容。更新了我的答案,以显示如何自动调用它。谢谢,但挑战在于如何让jQuery(或只是带DOM的纯js)遍历文档,在节和菜单中的链接上生成锚定名称。您的addSection()建议仍然需要我(程序员)了解文档的内容。更新了我的答案以显示如何自动调用它。当然,这个简单的脚本假定内容的格式一致,不进行错误检查,等等。。。它也可能是refac