Показать сообщение отдельно
  #3 (permalink)  
Старый 06.05.2020, 23:41
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от Павел_Левапевский
наглядный пример
Пример. Переделал немного.

index.html (не работает через file://)
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Single Page Application</title>
</head>

<body>

    <header>
        Header
        <nav>
            <a href="#home">Home</a> | <a href="#about">About</a>
        </nav>
    </header>

    <main>
        <!-- Ajax content -->
    </main>

    <footer>
        Footer
    </footer>

    <script src="js/router.js"></script>

</body>

</html>

js/router.js
var root = document.querySelector('main');

window.addEventListener('hashchange', onHashChange);
onHashChange();

function onHashChange() {
    ajax('views/' + (window.location.hash.slice(1) || 'home') + '.html', onAjaxLoad, onAjaxError);
}
function onAjaxLoad() {
    if (this.status == 200) {
        root.innerHTML = this.responseText;
        document.title = root.querySelector('header').textContent;
        var scripts = root.querySelectorAll('script');
        for (i = 0; i < scripts.length; i++) window.eval(scripts[i].textContent);
    } else {
        root.innerHTML = 'Status error';
    }
}
function onAjaxError() {
    root.innerHTML = 'Connection error';
}
function ajax(url, onLoad, onError) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url);
    xhr.addEventListener('load', onLoad);
    xhr.addEventListener('error', onError);
    xhr.send();
}

views/home.html
<article>
    <header>Home</header>

</article>

views/about.html
<article>
    <header>About</header>
    <script>console.log('About')</script>
</article>

Примеры разметки: header, nav, footer, article - здесь, main - здесь.

На jQuery через .load() можно.

Последний раз редактировалось Rise, 06.05.2020 в 23:58.
Ответить с цитированием