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