【问题标题】:Remove a script using Id使用 Id 删除脚本
【发布时间】:2020-09-01 03:52:22
【问题描述】:
我有下面的脚本,我正在嵌入和删除以嵌入下一个。但是我想通过 id 而不是 head.childNodes [head.childNodes.length - 1] 删除前一个标签。任何人都可以请帮忙。
var head = document.getElementsByTagName('head')[0];
var tag = document.createElement('script');
tag.type = 'text/javascript';
tag.id = 'adobedatalayer'
tag.textContent = "var DDO = {}; DDO.pageData = {'pageName': '" + pageLoadData.pageUrl + "'} ";
if (this._dataLayerInjected) {
var script = head.childNodes[head.childNodes.length - 1]; //get previous script element
head.removeChild(script); //removing script
head.appendChild(tag); // appending the script again
} else {
head.appendChild(tag);
this._dataLayerInjected = true;
}
【问题讨论】:
标签:
javascript
typescript
script-tag
【解决方案1】:
要不你在插入的时候保留一个对script标签的引用,然后下次运行这段代码时就可以.remove()它了?将其放在实例上,而不是保存 _dataLayerInjected 标志。你也可以用document.head代替document.getElementsByTagName('head')[0];:
// Remove previous script:
if (this.script) {
this.script.remove();
}
this.script = document.createElement('script');
this.script.id = 'adobedatalayer'; // is this really needed?
this.script.textContent = "var DDO = {}; DDO.pageData = {'pageName': '" + pageLoadData.pageUrl + "'} ";
document.head.appendChild(this.script);
【解决方案2】:
var head = document.getElementsByTagName('head')[0];
var tag = document.createElement('script');
tag.type = 'text/javascript';
tag.id = 'adobedatalayer';
tag.textContent = 'var DDO = {}; DDO.pageData =' + JSON.stringify(pageinfo);
var script = document.getElementById('adobedatalayer');
if (script != null) {
head.removeChild(script);
}
head.appendChild(tag);