JavaScript: заменить элемент с контентом из другого HTML - PullRequest
1 голос
/ 16 декабря 2011

Я бы хотел решить следующую проблему: имея ссылку на веб-страницу, я хотел бы заменить содержимое указанного элемента 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 не работает, так как загружается вся страница из WhatIsMyIP.
  • При использовании Chrome вся страница получаетперезагружается снова и снова с самого начала.Я думаю, что событие window.onpopstate запускается постоянно.

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

Ответы [ 4 ]

2 голосов
/ 16 декабря 2011

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

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

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

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

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

2 голосов
/ 16 декабря 2011

Относительно вашего первого выпуска

Попробуйте это

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

вместо этого

$.get(this.href, function(data) {
    $("#myid").replaceWith($(data).find("#fb-root"));
});
1 голос
/ 16 декабря 2011

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

0 голосов
/ 30 марта 2015

Если я вас правильно понимаю, вы просто хотите заменить содержимое указанного элемента div на странице 1 (в данном случае элемент div с идентификатором «myid») на содержимое элемента div со страницы 2 (страница 2 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;". предыдущая страница не объявлена, и вы не используете ее впоследствии. Поправь меня, если я ошибаюсь ...

...