Access包含<script> </script>的元素

时间:2014-07-28 17:02:43

标签: javascript ajax

我已经看到了一些暗示我正在寻找的方面的主题,但我需要更进一步。

我有一个网站使用AJAX在添加到网站时插入新内容。此内容有时包含内联JavaScript。就像现在一样,如果这个内联JavaScript包含document.write()调用,则页面内容的其余部分将被删除并替换为写入调用的内容并使页面破坏。

这些内联<script>元素始终包含在DIV中,但由于网站软件的性质,DIV可能会出现多次相同的帖子,因此不能使用名称或ID来帮助脚本找到新内容的位置。

我看到很多帖子都说当前正在执行的<script>应该显示为document.scripts中的最后一个元素,但是,当通过AJAX在页面中添加<script>时会发生什么?在页面布局中,<script>并不总是页面上的最后一个,所以如果在页面加载完成后添加,即使不在文档末尾,它仍会显示为document.scripts中的最后一个条目?

2 个答案:

答案 0 :(得分:0)

我担心你手上有严重的问题。

文档完成渲染后,document.write将替换它。因此,如果您尝试通过AJAX包含在SCRIPT元素中具有此类调用的标记,并且您想要执行这些脚本,那么您将覆盖该文档。

换句话说,你真的无法混合AJAX和document.write。你需要在没有其他人的情况下做返工。

答案 1 :(得分:0)

虽然这个答案只能真正满足我的具体问题,但它可能对其他人有帮助,所以我会发布我所做的事情:

我使用构成javascript调用的一些原始数据为包含DIV创建ID,允许该DIV具有脚本可以在DOM中访问的唯一ID。这样,当通过AJAX脚本注入代码并执行内联脚本时,它将定位其自己的容器的innerHTML,并使用应该在页面上显示的预期代码覆盖自身。

在我的具体用法中,我的脚本会将一系列数字作为参数,并将其替换为各种图像,符号和单词,具体取决于所代表的数字。我最终将输出格式化为:

<div id="{param1param2param3}">
<script>
   document.getElementById('param1param2param3').innerHTML={all the content the script is supposed to generate};
</script>
</div>

无论页面是正常加载还是通过AJAX加载,结果都是一样的。在极少数情况下,有两个具有相同ID的块(意味着完全相同的参数),所有浏览器似乎都正确处理它并用目标代码替换每个DIV。我不知道每个脚本是否实际上是针对自己的容器或任何其他具有相同ID的容器,但由于它们最终都以相同的内容为目标,所以它并不重要因为所有的DIV都被他们想要的内容所取代。 可以通过让脚本从正在处理的DIV中删除ID来进一步扩展,以便其他相同的&#34;阻止不要一遍又一遍地尝试在同一个DIV上执行。