JavaScript: заменить элемент с контентом из другого HTML

Я хотел бы решить следующую проблему: учитывая ссылку на веб-странице, я хотел бы заменить содержимое указанного div элемент с содержанием div элемент другой страницы. Скажем, просто загрузите текст "Стоять на плечах гигантов" со страницы Google Scholar в мою существующую div элемент.

В актуальном состоянии, если реализован следующий пример:

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>

<a href="http://www.whatsmyip.org/">Click me</a>

<div id="myid">Text to be replaced</div>

<script type="text/javascript">
    $("a").click(function() {
      $.get(this.href, function(data) {
        $("#myid").replaceWith($(data).find("#fb-root"));
      });
      previous_page = location.href;
      window.history.pushState({page: $(this).index()}, $(this).html(), $(this).attr('href'));
      return false;
    });

    window.onpopstate = function(event) {
      location.reload();
    }
</script>

</body>
</html>

Я включил window.history чтобы изменить URL в адресной строке и позволить пользователю восстановить предыдущее состояние веб-страницы без нового содержимого.

Теперь у меня есть две проблемы:

  • Замена <code>div</code> Элемент, кажется, не работает, так как загружается вся страница из WhatIsMyIP.
  • При использовании Chrome вся страница загружается снова и снова с самого начала. Я думаю, событие window.onpopstate срабатывает непрерывно.

Спасибо за любую помощь!

4 ответа

Решение

Вы могли бы объединить click и $.load по гиперссылке:

$('a').click(function(e){
    $('#myid').load($(this).attr('href'));
    e.preventDefault(); //needed to prevent navigation!
});

Если вам нужен специальный элемент на странице, вы можете добавить любой селектор. Пример:

 $('#myid').load($(this).attr('href') + ' div');

Это добавит все div запрашиваемой страницы.

Относительно вашего первого номера

Попробуй это

$('#myid').load(this.href + ' #fb-root');

вместо этого

$.get(this.href, function(data) {
    $("#myid").replaceWith($(data).find("#fb-root"));
});

Попробуй добавить event.preventDefault() до return false;

Если я вас правильно понимаю, вы просто хотите заменить содержимое указанного элемента div на page1 (в данном случае это элемент div с идентификатором "myid") на содержимое элемента div со страницы page (page2 - http://www.whatsmyip.org/).

Надеюсь, что это может помочь:

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>

<a href="http://www.whatsmyip.org/">Click me</a>

<div id="myid">Text to be replaced</div>

<script type="text/javascript">
$("a").click(function() {
  $.get(this.href, function(data) {
    var target_element_id_page2 = "element_id_page2";
    var target_element_type_page2 = "div";
    var respond= $('<div>' + data + '</div>');//You forgot this... It won't work unless you use it...
    var target_element = respond.find( target_element_type_page2 + '#'+ target_element_id_page2 )[0]; //There "might" be more div elements with the same id: that's why you specify index
    var container = document.getElementById( "myid");
    container.innerHTML = target_element.innerText;
    }, "html");
</script>

</body>
</html>

Я выбрал window.history.pushState и window.onpopstate, чтобы лучше ответить на ваш вопрос без ошибок, которые могли бы дать эти два кода. Если вы положите их обратно, это должно работать отлично. Хотя я не понимаю, почему вы используете " previous_page = location.href; ". предыдущая страница не объявлена, и вы не используете ее впоследствии. Поправь меня, если я ошибаюсь...

Другие вопросы по тегам