Javascript 如何用同一脚本生成的HTML内容替换当前脚本标记

Javascript 如何用同一脚本生成的HTML内容替换当前脚本标记,javascript,html,Javascript,Html,我想用相同脚本生成的HTML内容替换当前脚本标记。 也就是说,我的页面是 <html> <body> <div> <script src="myfile1.js"></script> </div> <div> <script src="myfile1.js"></script> </

我想用相同脚本生成的HTML内容替换当前脚本标记。 也就是说,我的页面是

 <html>
    <body>
       <div>
         <script src="myfile1.js"></script>
       </div>
       <div>
         <script src="myfile1.js"></script>
       </div>
    </body>
 </html>

在每个.js文件中生成相应的html内容。我想将内容作为父div的innerHTML。但是无法为父div设置id,因为页面不是静态的。因此,当前脚本标记必须替换为HTML内容。我该怎么做

对于每个脚本标记,src都是相同的。所以不能认同src。这些脚本显示 有些图像随机带有文本。脚本相同,但加载时在div中显示不同的内容


请帮助我

在myfile1.js中尝试一下:

var scripts = document.getElementsByTagName( "script" );
for ( var i = 0; i < scripts.length; ++ i )
{
   if ( scripts[i].src == "myfile1.js" )
   {
      scripts[i].parentNode.innerHTML = "new content";
   }
}
document.write("<p>some html generated inline by script</p>");
var scripts=document.getElementsByTagName(“脚本”);
对于(变量i=0;i
噗的一声——旧答案不见了

根据上次编辑,以下是您要执行的操作:

 <html>
    <head>
        <!-- I recommend getting this from Google Ajax Libraries
             You don't need this, but it makes my answer way shorter -->
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript">
          $(document).ready(function(){
             function getRandomContent(){
              // I expect this is the contents of your current script file.
              // just package it into a function.
              var rnd = Math.random();
              return "[SomeHtml]";
             }
             $('.random').each(idx, el){
                 $(this).html(getRandomHtmlContent());
             });
          });
        </script>
    </head>
    <body>
       <div class="random">
       </div>
       <div class="random">
       </div>
    </body>
 </html>

$(文档).ready(函数(){
函数getRandomContent(){
//我希望这是您当前脚本文件的内容。
//把它打包成一个函数。
var rnd=Math.random();
返回“[SomeHtml]”;
}
$('.random')。每个(idx,el){
$(this.html(getRandomHtmlContent());
});
});

不幸的是,正在运行的JavaScript文件不知道它在哪里运行。如果在脚本中使用document.write(),写函数将在脚本运行的任何地方执行,这将是实现所需内容的一种方法,但不会替换内容或对封闭的DIV执行任何操作


我真的无法想象在构建页面时会有如此严格的限制——当然,如果页面是动态的,您可以为DIV元素生成标识符,或者以更传统的方式加载内容?

如果您不介意脚本标记保留在适当的位置,您可以使用像document.write()这样简单的东西

myfile1.js:

var scripts = document.getElementsByTagName( "script" );
for ( var i = 0; i < scripts.length; ++ i )
{
   if ( scripts[i].src == "myfile1.js" )
   {
      scripts[i].parentNode.innerHTML = "new content";
   }
}
document.write("<p>some html generated inline by script</p>");
document.write(“一些由脚本内联生成的html

”;
它将完全满足您的需要。

为什么不使用Smarty

您可以在Smarty模板中使用javascript,也可以只使用内置函数


只要看一看

对于那些试图实现JSONP小部件的人来说,这是一个很好的问题。其目的是为用户提供尽可能短的代码量

用户更喜欢:

<script type="text/javscript" src="widget.js"></script>

超过:


下面是如何实现第一个代码段的示例:

TOP OF DOCUMENT<br />

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
// inside of widget.js
document.write('<div id="widget"></div>');
$(document).ready(function() {
    $.getJSON('http://test.com?remote_call=1', function(data) {
        $('#widget').html(data);
    });
});

<br />BOTTOM OF DOCUMENT
文档顶部
//widget.js的内部 文件。写(“”); $(文档).ready(函数(){ $.getJSON('http://test.com?remote_call=1,函数(数据){ $('#widget').html(数据); }); });
文档底部

查看:了解在脚本中包含库的正确方法。

文档。自2011年在Firefox上和2013年在Chrome上开始提供currentScript


当前脚本测试
测试开始
document.currentScript.outerHTML=“诸如此类”;

测试结束
myfile1.js已经完成了当时需要做的事情。你可以把它撕下来,期待它带来任何东西。它不会删除全局变量或取消文档。写入任何内容。编辑<代码>脚本[i].parentNode
返回
标记。要更改内容,您可以使用
innerHTML
或DOM函数。如果您始终确定脚本在运行时位于DOM中,这是一个很好的解决方案。但是,如果脚本标记是在加载文档之后添加的,假设脚本是在另一个脚本标记之前添加的,那么您会怎么做呢?我想他的意思是,如果您有
,并且s.js文件是
document.write(新内容)
您将获得
新内容

-相当不错simple@JohnGreen-PageSpike:先生,这个想法非常基本,我认为它不需要任何代码。当您希望脚本精确地呈现放置它的位置时,更不用说这种需求的原因了,document.write就是一种方法。无论如何,在下面的一篇帖子中也有完全相同的建议。为了你自己的一致性,也请投反对票。@John:不,它还在那里。显然,每个人都可以看到您对document.write的这种布尔仇恨。我可以说我来自一个离你很近的地方,但是我很确定你既不理解这个问题,也不理解解决方案,也不理解找到脚本自己的父脚本并将html附加到脚本中的方式。就我个人而言,我不在乎获得否决票,但我只希望你不会对那些相信你和你随机的迷信评论的新手造成太大伤害。下面唯一的帖子是关于Smarty的。我想我得到了解决方案,因为它是事后修改的,是我自己真正的克隆。我在这里的目标是帮助人们。这并不一定意味着用他们所需要的代码来溺爱他们,因为还有更多。我对你的代码有异议,因为这似乎是作者最初试图做的事情,而这正是我最初遇到的问题。但我离题了。。。我太过分了,我道歉。看来我们的帖子是按不同的顺序排序的。我指的是M1ke的回答,他说document.write可以。再说一次,更不用说作者要求的敏感性了。我过去常说,最好回答实际提出的问题。在这里发布的每一段代码背后都有太多的故事,所以我根本不想解释为什么会有这样的故事