1

我想要的是能够使用 JavaScript 处理围绕“入口点”(如标签或事件)的无上下文 HTML 元素<script>。我对我能做什么有一些严格的限制。

概括

  1. 我有多个用户生成的 HTML 块,需要在加载时自行处理。
  2. 这些块的内容可以包含相似的块,具有相似的行为。
  3. 内容也需要复制一次,可能会重新执行 2 中提到的脚本。
  4. 这些块是从静态模板生成的,不能(最初)包含唯一的标识数据,如 ID 或随机属性值。
  5. 这些块也可以通过 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.

限制

  1. 我不能使用 ID。一切都必须是或开始作为模板的无上下文替换。
  2. [tag]s 可以嵌套。
  3. 脚本需要复制一些内容,部分内容可以是类似的脚本等等。这会弄乱已经在外部标签对上运行的脚本。我有一个自下而上的解决方案来解决这个问题,但它依赖于在任何深度启动脚本,而不用担心类似的环境。(另一种表达方式)
  4. 这些标签可以随时使用 AJAX 在页面上的任何帖子中动态加载。

  5. 模板中的任何位置都可以有脚本,以使问题更容易。

我试过的

  1. 使用 JS 在<span id='something random'></span>加载时动态输出 a,搜索给定的 ID 并使用它的位置来查找周围的元素。当我动态加载页面和嵌套标签时,它不起作用。
  2. 给周围的元素一个类并找到它的最后一个元素。这不起作用,因为我们可能在页面中间有更新,在它加载之后。

我宁愿避免的解决方案

  1. 使用<img src='bogus' onerror='script entry point'/>,我可以运行脚本并使用this. 但我宁愿不使用断开的链接和错误来解决一个简单而相关的问题。
4

0 回答 0