我的任务是创建一个代理document.write(),以便在XHTML下提供此功能。通常,此函数不可用于避免XHTML被写入文档的无意义数据所破坏,但在某些情况下,使用模拟此函数的JavaScript可能是可行的,即,获取字符串并解析它以创建可以插入现有文档的DOM树。但是,要找到插入这个新创建的树的位置,我必须在文档中找到调用脚本节点的位置。
将函数附加到文档节点不是一个问题,因为在XHTML下它是可扩展的,并且解析输入字符串也不是那么大的问题。如果遇到错误,它们将被记录到控制台,并抛出异常。
考虑从外部文件加载的document.write的精简版本:
document.write = function (p_arg)
{
// X
// Do something with p_arg here
};
由于这个函数应该从文档体内的任何地方调用,我需要在X点插入什么才能找出调用此函数的位置(即调用该调用的脚本节点)? / p>
需要考虑以下标准:
我希望尽可能接近原始document.write,除非XHTML固有的限制适用,允许使用依赖于该函数的预先存在的代码。
现在,我如何找到插入由此函数生成的DOM树的位置(在JavaScript之后的节点之前,或者如果没有后继节点则在最后)?
答案 0 :(得分:1)
以下是我的想法。
它基本上可以运行正在运行的当前脚本,查找它的父级并附加元素。我还没有完成解析部分,所以在这个例子中只是假装已解析<b>there</b>
并且您已完成所有createElement位..
<script>
function docWrite(s) {
//lets pretend we have parsed the s..
//and it's <b>there</b>
let b = document.createElement('b');
b.textContent = 'there';
let scr = document.currentScript;
scr.parentNode.insertBefore(b, scr);
}
</script>
<h1>Hello</h1>
<script>docWrite('<b>there</b>');</script>
<span>After</span>
&#13;