我想要的是能够使用 JavaScript 处理围绕“入口点”(如标签或事件)的无上下文 HTML 元素<script>
。我对我能做什么有一些严格的限制。
概括
- 我有多个用户生成的 HTML 块,需要在加载时自行处理。
- 这些块的内容可以包含相似的块,具有相似的行为。
- 内容也需要复制一次,可能会重新执行 2 中提到的脚本。
- 这些块是从静态模板生成的,不能(最初)包含唯一的标识数据,如 ID 或随机属性值。
- 这些块也可以通过 AJAX 生成,这是我无法控制的。他们需要在出现时照顾好自己,而不依赖于任何执行顺序。
背景
这是一个论坛软件,其中某些 BBCode 标记,比如说[tag]content[/tag]
被固定的 HTML 替换。我无权访问任何服务器端脚本,因此替换与上下文无关,即始终相同。例如,[tag]{content}[/tag]
会变成类似:
<span ...>
...
{content}
...
<!-- script entry point -->
</span>
我需要在加载数据时进行一些客户端处理。
我无法更改问题的要求。最终产品是用于生成选项卡的代码,例如:
[tabspace]
[tab]content 1[/tab]
[tab]
content 2, and
nested tabs:
[tabspace]...[/tabspace]
[/tab]
[/tabspace]
脚本输出的内容包含在“选项卡按钮”本身中,它们将链接到它们各自的content
.
限制
- 我不能使用 ID。一切都必须是或开始作为模板的无上下文替换。
[tag]
s 可以嵌套。- 脚本需要复制一些内容,部分内容可以是类似的脚本等等。这会弄乱已经在外部标签对上运行的脚本。我有一个自下而上的解决方案来解决这个问题,但它依赖于在任何深度启动脚本,而不用担心类似的环境。(另一种表达方式)
这些标签可以随时使用 AJAX 在页面上的任何帖子中动态加载。
模板中的任何位置都可以有脚本,以使问题更容易。
我试过的
- 使用 JS 在
<span id='something random'></span>
加载时动态输出 a,搜索给定的 ID 并使用它的位置来查找周围的元素。当我动态加载页面和嵌套标签时,它不起作用。 - 给周围的元素一个类并找到它的最后一个元素。这不起作用,因为我们可能在页面中间有更新,在它加载之后。
我宁愿避免的解决方案
- 使用
<img src='bogus' onerror='script entry point'/>
,我可以运行脚本并使用this
. 但我宁愿不使用断开的链接和错误来解决一个简单而相关的问题。