Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
你能让javascript函数在页面上用自定义html替换自己吗?_Javascript_Html - Fatal编程技术网

你能让javascript函数在页面上用自定义html替换自己吗?

你能让javascript函数在页面上用自定义html替换自己吗?,javascript,html,Javascript,Html,我有一些javascript,可以在页面上创建一些小部件。我将把这个片段给客户,所以我希望他们只需要做很少的事情 我目前正在研究的最明显的解决方案如下: <div id="divContent"></div> <script type="text/javascript"> MakeWidget('divContent'); </script> <div id="divContent"></div> <scri

我有一些javascript,可以在页面上创建一些小部件。我将把这个片段给客户,所以我希望他们只需要做很少的事情

我目前正在研究的最明显的解决方案如下:

<div id="divContent"></div>
<script type="text/javascript">
    MakeWidget('divContent');
</script>
<div id="divContent"></div>
<script>
MakeWidget('divContent');
</script>

MakeWidget('divContent');
makewidget基本上查找divContent div,并用我的widget的html填充它

有更好的方法吗? 您可以使用脚本标记中的Javascript将脚本标记替换为Div吗

如果我能将代码简化为MakeWidget函数,并用函数生成的html替换它自己和脚本标记,我真的很想看到它


编辑-我基本上希望在页面上调用MakeWidget函数的地方生成HTML。

您必须在某个地方定义
MakeWidget
,对吗?这大概是在一个外部脚本中。为什么不让外部脚本源使用
window.onload
方法将自身附加到
divContent

这将导致客户页面上出现以下代码:


其他脚本加载可能会出现一些问题,也可能会出现一些跨浏览器兼容性问题,但这应该会让您找到正确的方向。

因此,您希望使用一个脚本元素,将其自身替换为div

您的初始代码如下所示:

<div id="divContent"></div>
<script type="text/javascript">
    MakeWidget('divContent');
</script>
<div id="divContent"></div>
<script>
MakeWidget('divContent');
</script>

MakeWidget('divContent');
您可以这样重写它(我正在使用JQuery):


$('#scriptContent')。在('')之后;
MakeWidget('divContent');
$('#scriptContent')。删除();
我还没试过呢

您可以使用脚本标记中的Javascript将脚本标记替换为Div吗

对。当到达
元素时,假设它不是
延迟
异步
脚本,它将是页面中到目前为止的最后一个脚本元素。因此,您可以在内联脚本或外部脚本中说:

<script type="text/javascript">
    (function() {
        var scripts= document.getElementsByTagName('script');
        var script= scripts[scripts.length-1];
        var div= document.createElement('div');
        div.innerHTML= 'Whatever content is going to be inserted';
        script.parentNode.insertBefore(div, script);
    })();
</script>

(功能(){
var scripts=document.getElementsByTagName('script');
var script=scripts[scripts.length-1];
var div=document.createElement('div');
div.innerHTML='将要插入的任何内容';
script.parentNode.insertBefore(div,script);
})();

我认为可以按如下方式进行:

<div id="divWidgets">
    <script type="text/javascript">
        MakeWidgets("divWidgets");
    </script>
</div>

MakeWidgets(“divWidgets”);

最终结果应该是(如果我正确理解您的描述的话)MakeWidgets将替换DIV的内容,在本例中,是脚本本身。

问题是我不需要特定的Div。我想在执行javascript的地方生成HTML。TypeError:sscripts是
未定义的
第4行:)@JoshStodola没有看起来那么奇怪,因为目标消除了对唯一ID的需要。
<div id="divWidgets">
    <script type="text/javascript">
        MakeWidgets("divWidgets");
    </script>
</div>