2015-03-02 3 views
1
$(function() { 
    var content = $('#content'); 

    $('a').on('click', function(e) { 
     History.pushState(null, $(this).text(), $(this).attr('href')); 

     return false; 
    }); 

    History.Adapter.bind(window, 'statechange', function() { 
     var state = History.getState(); 

     content.html('loading...'); 

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

browserstate/history.jsКак запустить JavaScript, какой файл был загружен PushState

Я хотел бы использовать pushState изменить содержимое страницы, но на самом деле содержание каждого может иметь различный JavaScript для запуска, есть два пути на мой взгляд, решить его

  1. писать все возможные функции в одном сценарии, с помощью JQuery on связать это событие
  2. положить JavaScript внутри #content, поэтому при рендеринге контента также будет отображаться сценарий

Первое решение сделает файл js большим и сложным, второе решение вызовет html-файл уродливым, любое лучшее решение?

ответ

1

Я сделал второй вариант, и он работает хорошо. Просто имейте в виду, что теги <script>will be stripped and added to the bottom.

Вы фактически Аякса инга контента с помощью $.get

Вы можете использовать .load() вместо .get(), .html() и .filter()

content.load(state.url+" #content");

Он специально разработан для загрузки HTML одних элементов игровая в другой.

+0

Спасибо за предложения :) – Chan

+0

Я хотел бы задать вам еще один вопрос, будет ли скрипт занимать память при переходе на другой контент страницы? – Chan

+0

Я не думаю, что так будет. После удаления элементов из DOM события javascript будут выпущены. Посмотрите [здесь] (http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory). – Miro