使用 AJAX 将页面加载到特定锚点的 div

Using AJAX to load page into a div at a specific anchor

我在这里看到了一些与此相关的问题,但我没有看到我所说的确切情况,所以我想我会问。

我有一个包含两个 div 的页面。一个sidenavdiv(sidediv)和一个主体(maindiv)div.

我想要的: 单击侧面导航中的 link 以在主 div 中加载页面。目前,无论如何,它始终是相同的页面,但它是一个带有多个锚点的巨大页面。旁边的项目 link 到不同的锚点。

我在做什么: 我的 sidenav link 看起来像这样:

<a href="#" onclick="loadPage('mypage.html#ds'); return false;">Desired Section</a>

和 JS:

function loadPage(url){
    var xhr= new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.onreadystatechange= function() {
        if (this.readyState!==4) return;
        if (this.status!==200) return; 
        document.getElementById('maindiv').innerHTML= this.responseText;
    };
    xhr.send();
}

发生了什么: 它加载 mypage.html 很好,但拒绝转到锚点。

我如何做到这一点(没有 jQuery,顺便说一句,我目前没有在现场使用它,而且不想加载它一件事)

谢谢。

好的,这很有趣,所以我试了一下。这是我想出的。它使用 scrollIntoView。还要记住,我模拟了 ajax 调用,所以我的 loadPage 函数做了一些与您不同的事情。

var pages = {
    'mypage.html': '<div id="ts" class="page">my stuff</div><div id="ds" class="page">my more stuff</div><div id="eds" class="page">my even more stuff</div>',
    'yourpage.html': '<div id="ts" class="page">your stuff</div><div id="ds" class="page">your more stuff</div><div id="eds" class="page">your even more stuff</div>'
};

function loadPage(url) {
    var set = url.split('#'),
        page = set[0],
        id = set[1];

    // simulate xhr request
    setTimeout(function() {
        document.getElementById('maindiv').innerHTML = pages[page];
        document.getElementById(id).scrollIntoView();
    }, 1000);
}
.page {
  height: 400px;
}

.menu {
  width: 200px;
  float: left;
  position: fixed;
}

#maindiv {
  width: 50px;
  float: right;
  background: lightblue;
}
<div class="menu">
    <a href="#" onclick="loadPage('mypage.html#ds'); return false;">My Page #ds</a><br />
    <a href="#" onclick="loadPage('yourpage.html#eds'); return false;">Your Page #eds</a>
</div>

<div id="maindiv">
</div>