13

jQuery で history.js を使用するのに少し問題があります。戻るボタンでナビゲーション セットを機能させたかっただけです (これは非常にうまく機能しているようです)。でも。戻るボタンをクリックすると、URL が古いものに変わります (これも良いことであり、私が望むものです) が、コンテンツは本来のように置き換えられません。

これをもう少しわかりやすくするために、いくつかのコードを示します。

    <ul class="content_links">
        <li><a href="/historyapi/pages/content_page_1.html">Content page 1</a></li>
        <li><a href="/historyapi/pages/content_page_2.html">Content page 2</a></li>
        <li><a href="/historyapi/pages/content_page_3.html">Content page 3</a></li>
        <li><a href="/historyapi/pages/content_page_4.html">Content page 4</a></li>
        <li><a href="/historyapi/pages/content_page_5.html">Content page 5</a></li>
    </ul>
    <div id="content">
        <p>Content within this box is replaced with content from supporting pages using javascript and AJAX.
    </div>

明らかに私が欲しいのは、.load() でうまく簡単に行われるコンテンツに読み込まれるページのコンテンツであり、ユーザーがそれを使用する場合は、戻るボタンを後方に移動する必要があります。現在、URL は変更されていますが、ボックス内のコンテンツは変更されていません。それを変更または修正するにはどうすればよいですか?

4

2 に答える 2

37

次のことを試してください。

<ul class="content_links">
    <li><a href="/historyapi/pages/content_page_1.html">Content page 1</a></li>
    <li><a href="/historyapi/pages/content_page_2.html">Content page 2</a></li>
    <li><a href="/historyapi/pages/content_page_3.html">Content page 3</a></li>
    <li><a href="/historyapi/pages/content_page_4.html">Content page 4</a></li>
    <li><a href="/historyapi/pages/content_page_5.html">Content page 5</a></li>
</ul>
<div id="content">
    <p>Content within this box is replaced with content from supporting pages using javascript and AJAX.
</div>

<script>
$(function() {

    // Prepare
    var History = window.History; // Note: We are using a capital H instead of a lower h
    if ( !History.enabled ) {
         // History.js is disabled for this browser.
         // This is because we can optionally choose to support HTML4 browsers or not.
        return false;
    }

    // Bind to StateChange Event
    History.Adapter.bind(window,'statechange',function() { // Note: We are using statechange instead of popstate
        var State = History.getState();
        $('#content').load(State.url);
        /* Instead of the line above, you could run the code below if the url returns the whole page instead of just the content (assuming it has a `#content`):
        $.get(State.url, function(response) {
            $('#content').html($(response).find('#content').html()); });
        */
        });


    // Capture all the links to push their url to the history stack and trigger the StateChange Event
    $('a').click(function(evt) {
        evt.preventDefault();
        History.pushState(null, $(this).text(), $(this).attr('href'));
    });
});
</script>
于 2012-11-25T16:44:24.083 に答える
2

次のビットが機能しないようです。

$.get(State.url, function(response) {
  $('#content').html($(response).find('#content').html());
});

「検索」を使用する前に、「応答」を dom 要素に変換する必要があります。そのようです:

$.get(State.url, function(response) {
    var d = document.createElement('div');
    d.innerHTML = response;
    $('#content').html($(d).find('#content').html());
});
于 2014-12-15T13:13:27.160 に答える