【问题标题】:jQuery replace all HTMLjQuery替换所有HTML
【发布时间】:2011-10-01 13:54:46
【问题描述】:

我正在尝试用另一个页面替换所有 HTML(包括 HTML 标记)。我想要做的是让一个网站作为一个应用程序,即使在导航另一个页面时也是如此。

代码如下:

(function($) {
  Drupal.behaviors.loadingPage = {
    attach: function(context,settings) {
      $('a').click(function(event) {
        event.preventDefault();
        // Create the loading icon
        // ...
        $.ajax({
          url: $(this).attr('href'),
          success: function(data) {
            $('html').replaceWith(data);
          }
        });
      });
    }
  };
})(jQuery);

我已经尝试了几件事。 replaceWith() 在删除 HTML 标签后导致 jquery.js 中的 jQuery 错误,我猜是因为它无法再找到父级来添加替换。

我得到的最好结果是document.write(data)。问题是,加载页面上的javascript代码没有执行。

谁有更好的主意?

【问题讨论】:

  • 尝试用数据的内容替换<html>标签的内容? <html> 没有任何有用的属性。
  • 也就是说,这将实现的唯一目标是在用户单击其上的链接之前模拟其他页面。
  • @Sii 如果有的话,它保存着你不想重做的浏览器测试结果,因为我们都在使用 Modernizr 对吗? :P
  • 如果你还是要重新加载整个页面,你为什么要用ajax呢?只需将window.location 设置为新的 URL,或者如果您需要将其作为 POST 而不是 GET,可以 POST 表单。
  • @Sii 数据变量中包含 HTML 标记,这就是为什么我不能直接替换它的原因。尖尖的:请参阅下面我对 nnnnnn 的回答。

标签: javascript jquery drupal drupal-7


【解决方案1】:

更好的主意?是的,只需通过设置window.location 而不是使用 AJAX 来正常加载新页面。或提交表单。

否则,如果您想加载一些内容来替换当前页面的所有可见内容,但保持当前页面的脚本继续运行,请将所有可见内容放在一个大小足以填满浏览器窗口的框架中 - 同样,您不会使用 AJAX 填充。

(我喜欢 AJAX,但我不明白你为什么要用它来替换整个页面。)

【讨论】:

  • 正如我在第一篇文章中所说(但很糟糕,我猜),我试图让我的网站充当真正的应用程序,而不是浏览器中的页面。为此,我在加载 internal 点击链接时放置了一个“加载图标”。我只想知道如何 :-)。使用框架可以让我这样做吗?我只是使用 AJAX,因为这是我认为的一种方式。
  • 完全主观的说:单页应用程序非常烦人,而且冒充第三方网站更是如此(回想一下 DiggBar 的惨败)。 Web 应用程序的用户希望在应用程序中导航以更改页面,或者至少更改 URL。
  • 另外,是的,在您的网页中嵌入另一个网页的规范方法是框架或 iframe。请记住,如果出于安全原因,它们来自其他域,您将无法从脚本中访问它们的内容。
  • 按照 Sii 所说的,如果所有 您的“应用程序”来自同一个域,那么您的框架可以访问彼此的内容(包括在其他框架等)。不过,框架教程超出了这里的答案范围。
  • 好的,谢谢大家的回答 :) @Sii:我确实计划使用 code.google.com/web/ajaxcrawling/docs/getting-started.html 更改 URL
猜你喜欢
  • 2013-05-20
  • 2012-12-16
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多