JavaScript 在执行点插入元素
JavaScript insert element at point of execution
是否可以在执行<script>
标记时插入DOM HTML元素?就像document.write()
函数一样,它在执行时会立即将文本插入 DOM 中。
[更新]
是的,它是!这是我想到的:
var injectElement = function (element) {
//Function that generates random id
var randomID = function () {
var id = '';
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for( var i=0; i < 5; i++ )
id += chars.charAt(Math.floor(Math.random() * chars.length));
return id;
};
var id = randomID();
//Adding placeholder element
document.write('<div id="' + id + '"></div>');
//Injecting new element instead of placeholder
var placeholder = document.getElementById(id)
placeholder.parentNode.replaceChild(element, placeholder);
};
是的,这是可能的:
<script>
var arrScripts = document.getElementsByTagName('script');
var currScript = arrScripts[arrScripts.length - 1];
var newNode = document.createElement('div');
newNode.innerHTML = 'This is a DIV';
currScript.parentNode.appendChild(newNode);
</script>
此代码首先在文档中查找当前脚本块,然后在其后追加 DOM 元素。
好的
,所以我稍微考虑了一下,我想我已经创造了一种故障安全的方法,可以在<script>
标签之后将元素注入 DOM 中,原因很简单:
<script>
injectElement(document.createElement('canvas'));
</script>
首先,我使用 document.write
插入具有随机id
属性的div
。之后,我得到带有随机id
的占位符,并将其替换为我要注入的新元素。
天才,如果我可以这么说,我的自我:D
代码如下:
var injectElement = function (element) {
//Function that generates random id
var randomID = function () {
var id = '';
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for( var i=0; i < 5; i++ )
id += chars.charAt(Math.floor(Math.random() * chars.length));
return id;
};
var id = randomID();
//Adding placeholder element
document.write('<div id="' + id + '"></div>');
//Injecting new element instead of placeholder
var placeholder = document.getElementById(id)
placeholder.parentNode.replaceChild(element, placeholder);
};
如果你的目标是IE,请使用document.currentScript并回退到document.scripts[document.scripts.length-1]
function writeHere(element)
{
var sc = document.currentScript || document.scripts[document.scripts.length-1] ;
sc.parentNode.insertBefore(element, sc);
// or in jquery $(sc).before($(element));
}
注意:我没有彻底测试document.scripts[document.scripts.length-1]
但它在大多数情况下应该有效(= 如果您没有在其他脚本中手动创建脚本元素)。
这是IE的修复程序,所以谁在乎:)
相关文章:
- jQuery/Javascript在内容可编辑的当前段落后插入元素
- 尝试在元素之前插入元素的结果
- 使用java脚本在html中插入元素
- ()插入元素,然后将其取回
- 在子字符串前后插入元素
- 将语法代码插入“
”元素时,ckeditor 会自动关闭标记
- D3.js - 根据当前基准面追加或插入元素
- 初学者 - 尝试让 jQuery 插入元素
- 在插入元素后在 ckeditor 中创建书签 2
- Javascript - 在脚本位置插入元素
- JavaScript 在执行点插入元素
- 通过javascript插入元素,而不会丢失jquery移动样式页面
- 使用jQuery设置插入元素的动画
- Mongoose如何在现有对象(MongoDB和Node.js)上插入元素
- jquery自动完成具有未知id的动态插入元素
- 在停止元素的同时插入元素的确认行为'的其他事件处理程序
- 动态插入元素的CSS
- 使用jQuery在祖先和后代之间插入元素
- 如何在ember js中插入元素后获得通知
- 在第n个位置插入元素