JavaScript:将元素替换为另一个HTML中的内容

时间:2011-12-16 11:00:16

标签: javascript jquery replace pushstate

我想解决以下问题:给定网页上的链接,我想用另一个页面的div元素的内容替换指定的div元素的内容。比如说,只需将Google学术搜索页面中的“站在巨人的肩膀上”加载到我现有的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以更改位置栏中的网址,并允许用户在没有新内容的情况下恢复网页的先前状态。

现在,我有两个问题:

  • <code>div</code>元素的替换似乎不起作用,因为载入了WhatIsMyIP的整个页面。
  • 使用Chrome时,整个页面会从一开始就一次又一次地重新加载。我认为,事件window.onpopstate会不断触发。

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

关于你的第一个问题

试试这个

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

而不是

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

答案 1 :(得分:2)

您可以在超链接上合并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 :(得分:1)

尝试在event.preventDefault()

之前添加return false;

答案 3 :(得分:0)

如果我理解正确,你只想将page1上指定div元素的内容(在本例中为ID为“myid”的div元素)替换为page2中div元素的内容(第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;”。 previous_page未声明,之后您没有使用它。如果我错了,请纠正我......