【问题标题】:Replace content of iframe after doing data processing via jQuery通过 jQuery 进行数据处理后替换 iframe 的内容
【发布时间】:2023-04-08 00:33:01
【问题描述】:

我有以下函数从服务器获取 HTML 模板并替换一些标签

$.ajax({
    url: "/newsletter/preview/1",
    data: {},
    success: function(data) {
        var template = data;
        var layer = $("<iframe>").attr({ "id": "preview_frame" });
        $("#newsletter .element input, #newsletter .element textarea").each(function() {
            var id = "\\$\\$"+$(this).parent().parent().attr("id").replace(/^newsletter_/, "")+"\\$\\$";
            template = template.replace(new RegExp(id, "g"), htmlspecialchars($(this).val(),2));
        });
        $("body").prepend(layer);
    },
    dataType: "html"
});

获取模板工作正常。还用表单内容替换标签(当将alert(escape(template)); 放在each 循环内时,我看到所有标签都被替换了)。但是还有两个未解决的问题:

  • 我没有找到将变量 template 的内容设置到 iframe 中的方法 ($("#preview_frame").contents().find("body").html(template); 只会产生一个空框架)

  • 将 iframe(变量 layer)添加到 HTML 正文中 在遍历表单字段期间,但必须在(!)之后完成 所有标签都已被替换,因此只有完整处理的模板将放置在 iframe 中。

【问题讨论】:

  • 你无法通过这种方式设置 iframe 内容。
  • 我已经这么认为了。但有什么解决办法呢?它不一定是 iframe。但是 HTML 包含完整的 CSS 等等,所以我认为 iframe 是查看 HTML 的最佳方式,并且与主页上的 CSS 没有冲突。

标签: jquery html dom iframe dom-manipulation


【解决方案1】:

我现在正在使用来自http://malsup.com/jquery/form/ 的 jQuery 表单插件。 所以我通过 Ajax 向服务器发送表单,服务器在成功发送表单后生成临时文件,通过 iframe 包含。

【讨论】:

    【解决方案2】:

    动态添加一个 ifame 源是您的 ajax 调用 url,并在 iframe 页面的 onload 中执行 javascript 操作。

    $("<iframe/>").attr({
       source: "/newsletter/preview/1",
       id: "preview_frame"
    }).appendTo($("body"));
    

    【讨论】:

    • 如果你想使用 iframe 来避免 html 和 css 冲突,这应该没问题
    • 所以替换标签必须通过JS在iframe中完成?这是不可能的,因为我不能在模板中放置 JS 代码。
    猜你喜欢
    • 2011-10-20
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多