【发布时间】:2015-05-25 01:56:26
【问题描述】:
短版:如何保持不同<script>元素的内容相互独立?
加长版:我有一个 django 模板,看起来有点像这样:
<div class="app-container">
<script src="app.js"></script>
<script>
$(function() {
app_init($('.app-container')); // app_init is defined in app.ja
});
</script>
</div>
困难在于我希望能够在同一页面中多次包含此模板。当我这样做时,$('.app-container') 选择器会匹配页面上的所有 <div class="app-container"> 元素。
保持这些独立的最佳方式是什么?我能想到的一些选项,但不太清楚如何使它们起作用:
- 找到
<div ...>标记,它是<script>标记的父标记。如果脚本是自动执行的,那么我可以使用document.scripts[-1]看到它是如何工作的,但是当代码在$(function () { ... })中执行时我不知道如何执行此操作。 - 以编程方式分配
<div>标记的类,然后以编程方式在javascript 中找出相同的类。但我不知道该怎么做。 - 巧妙地使用匿名函数并捕捉到了这一点,我还是不太明白。
编辑我看到人们对此提出了各种不同的建议:
<div class="app-container">
<script>
var thisscript = document.currentScript;
$(function() {
app_init($(thisscript).closest('.app-container'));
});
</script>
</div>
如果模板在一个页面中被多次使用,这将不起作用,因为thisscript 变量在它们之间是通用的,因此它始终是页面中最后一个被处理的div.app-container。
【问题讨论】:
-
你的最终目标是什么?看起来你的代码正在做它应该做的,但不是你想要的。你想达到什么目的?如果您需要独特的元素,可以在每个元素上使用一个 id。
-
嗯,和罐头上写的差不多。我希望能够编写一个 django 模板,其中包含一些 html 标签和一些操作这些标签的脚本,而不必在每次包含模板时为标签分配唯一的 ID。我可以只要求用户在每次包含模板时添加一个 edtra
unique_id参数,但这很烦人,如果他们忘记这样做,就会默默地失败,而且看起来应该没有必要——我应该能够得到一个引用包含 this 脚本标记的div标记。
标签: javascript jquery html django