Javascript 对document.write插入的元素的引用
我在外部javascript文件中创建了一个元素:Javascript 对document.write插入的元素的引用,javascript,embed,widget,Javascript,Embed,Widget,我在外部javascript文件中创建了一个元素: var element = document.createElement('div'); 现在我需要将元素附加到主体中,并且仍然保留对它的引用(elementvariable)。 但是我需要在脚本标记后面添加它,比如document.write()就可以了 我不能将类和id用于脚本和元素本身——我不在我的站点上,这些脚本可能不止一个 如何解决这样的任务? 上下文:我想构建一些可以在其他站点上使用的小部件。仅创建元素是不够的。使用documen
var element = document.createElement('div');
现在我需要将元素附加到主体中,并且仍然保留对它的引用(element
variable)。但是我需要在脚本标记后面添加它,比如
document.write()
就可以了
我不能将类和id用于脚本和元素本身——我不在我的站点上,这些脚本可能不止一个
如何解决这样的任务?上下文:我想构建一些可以在其他站点上使用的小部件。仅创建元素是不够的。使用document.body.insertBefore、document.body.appendChild和其他函数将其添加到页面元素列表中 样本函数
function addElement()
{
// create a new div element
// and give it some content
newDiv = document.createElement("div");
newContent = document.createTextNode("Hi there and greetings!");
newDiv.appendChild(newContent); //add the text node to the newly created div.
// add the newly created element and it's content into the DOM
my_div = document.getElementById("org_div1");
document.body.insertBefore(newDiv, my_div);
}
Ref:创建新元素时,将其分配给某个variableName。因此,您可以使用变量名本身作为变量的引用。这样如何:
if(typeof globalScriptCounter === "undefined")
var globalScriptCounter = 1;
else
globalScriptCounter++;
var scripts = document.getElementsByTagName("script");
var localCounter = 0;
for(var i = 0; i < scripts.length; i++) {
if(scripts[i].src === "yourwidget.js") { // You should know the path since it is your widget
localCounter++;
if(globalScriptCounter === localCounter) {
document.body.insertBefore(element, scripts[i]);
break;
}
}
if(globalScriptCounter的类型==“未定义”)
var globalScriptCounter=1;
其他的
globalScriptCounter++;
var scripts=document.getElementsByTagName(“脚本”);
var localCounter=0;
对于(var i=0;i
编辑:我编辑了我的代码。试试看!我最终得到了以下来源: 我的框架的定义(我认为是公平的):
myNamespace小部件脚本
类小部件脚本:
!function() {
//-->BEGIN GET WIDGET INDIVIDUAL ID
var localWidgetCounter = 0;
if ( _.isUndefined(myNamespace) ) {
myNamespace = {}
}
if ( _.isUndefined(myNamespace.widgetsCounter) ) {
myNamespace.widgetsCounter = 0;
} else {
localWidgetCounter = myNamespace.widgetsCounter += 1;
}
//-->END GET WIDGET INDIVIDUAL ID
$.domReady(function() {
var teaser = ...here i generate my html DOM elements...
teaser.insertAfter($('.myNamespace-widget-script')[localWidgetCounter]);
});
}.call({});
你为什么不让你的用户决定这些小部件的放置位置?他们通过包含脚本标签来决定这些小部件的放置位置。就像youtube一样,他们通过嵌入iframe的代码来完成。不幸的是,我不能使用iframe…我不能为脚本和元素本身使用类和id-我不在我的网站上,可能有多个这样的小部件脚本…我没有污染全局范围。你救了我的命!经过一些小的修改,我最终得到了我的代码-见下文。