我在我的HTML中有以下锚点标记,用于从该HTML位置将内容加载到当前页面上的contents
div。这种定位的标签是引导树形插件的一部分,我用生成的内容表:保持锚点标记href跳转到它的页面
<a href="/Introduction/index.html#1-1-overview1" style="color:inherit;">1.1 Overview</a>
在我的JavaScript,我有下面的代码,我用它来听两个事件。一为锚标记,这样我禁用默认的行为和其他处理的定位标记并加载内容和滚动到锚如下:
$("a[href*='#']").click(function(e) {
e.preventDefault();
});
// Add smooth scrolling to all links inside a navbar
$treeview.on('nodeSelected', function (e, data) {
e.preventDefault();
if (data && data.href !== "") {
// Split location and hash
var hash = data.href.match(/[#].*/g)[0];
var location = data.href.match(/[^#]*/g)[0];
if (prevLocation === location) {
// Don't reload page if already at same location as last clicked
$('html, body').animate({
scrollTop: $(hash).offset().top - 55
}, 200);
} else {
prevLocation = location;
$('#contents').load(location, function() {
$('html, body').animate({
scrollTop: $(hash).offset().top - 55
}, 200);
});
}
}
$body.scrollspy('refresh');
$sideBar.affix('checkPosition');
});
我所看到的是,第一次点击我的TOC中的一个节点,它按预期将HTML加载到内容div中,但是第二次单击它时,它会加载在锚标记中引用的HTML页面,尽管我努力跟踪是否以前加载过它,上面的条件逻辑。我还注意到,在随后的点击中,锚选择器未被调用。
任何想法如何让TOC最初将HTML从另一个页面加载到当前页面,然后在随后的调用中滚动到锚点位置(即章节)?
你尝试'返回false;'以及'preventDefault'? – DavidG
您可以使用chrome的开发人员工具调试它,看看prevLocation每次的价值是什么? – klikas
'return false'导致'nodeSelected'事件没有被调用,但是如果我将这两个函数结合在锚点选择器下,消除'nodeSelected'事件并返回false,那么它看起来很有效! – occasl