JQuery $(document).ready()和document.write()

21

首先,有没有办法在JQuery的$(document).ready()方法中使用document.write()?如果有,请给我提示,因为那将解决我的问题。

否则,我有一个人的代码要与我的代码配合使用。问题是我不被允许以任何方式更改他的代码。不工作的部分大致如下:

document.write('<script src=\"http://myurl.com/page.aspx?id=1\"></script>');
document.write('<img src=\"/image/1.jpg\" alt=\"Second image for id 1\">')

这些脚本只是实际发生的事情的示例。问题在于,初始脚本中有一个document.write(),而在附加到第一个脚本的脚本中也有一个document.write(),我必须以某种方式使其在JQuery的$(document).ready()函数中正常工作,而不更改原始代码。

我不知道该怎么办。帮帮我?

4个回答

41

根据给定的要求,不,你不能使用document.write而不会真正破坏文档。如果你真的不想改变代码,你可以像这样覆盖document.write()的功能,并稍后添加结果:

var phbRequirement = "";

$(function() {
  document.write = function(evil) {
    phbRequirement += evil;
  }
  document.write("Haha, you can't change my code!");
  $('body').append(phbRequirement);

});

请确保在使用document.write函数之前覆盖它。您可以随时这样做。

其他答案很无聊,这个方法很有趣,但为了满足要求而非常错误。


稍加调整后,我成功地使用了这种方法来解决我的问题!非常感谢。你让我免去了很多浪费时间的麻烦! - Kappers

6

picardo的方法是我会用的方法。为了更好地解释这个概念,请仔细阅读:

$('<script/>')
   .attr('src', 'http://myurl.com/page.aspx?id=1')
   .appendTo('body');

备选样式:

var imgnode = $('<img alt="Second image for id 1"/>')
   .attr('src', "image1.jpg");

$('#id1').append(imgnode);

一定要使用 attr 方法来设置任何动态属性,这样就不需要转义特殊符号。

此外,我不确定动态生成脚本标签的有效性;我从未尝试过。虽然预期它们包含或引用客户端脚本。我的假设是 page.aspx 将返回什么内容。你对你想在那里做什么的问题有点模糊。


3

jQuery有一个可替代document.write的方法,你只需要使用append方法即可。

   jQuery('<img src=""/>').appendTo('body');

这是相当明显的。简单来说,您可以将 <p> 替换为任何您想要的 html。而 appendTo 方法中的标签名是您要附加您的 html 的标签名称。就是这样。


3

picardo的答案是可行的,但我更喜欢这个更直观的方法:

$("body").append('<img src=\"/image/1.jpg\" alt=\"Second image for id 1\">');

此外,对于使用document.write()插入的脚本部分,请查看jQuery的getScript()函数。 (链接)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接