Javascript 对document.write插入的元素的引用

Javascript 对document.write插入的元素的引用,javascript,embed,widget,Javascript,Embed,Widget,我在外部javascript文件中创建了一个元素: var element = document.createElement('div'); 现在我需要将元素附加到主体中,并且仍然保留对它的引用(elementvariable)。 但是我需要在脚本标记后面添加它,比如document.write()就可以了 我不能将类和id用于脚本和元素本身——我不在我的站点上,这些脚本可能不止一个 如何解决这样的任务? 上下文:我想构建一些可以在其他站点上使用的小部件。仅创建元素是不够的。使用documen

我在外部javascript文件中创建了一个元素:

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小部件脚本
  • 有一个全局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-我不在我的网站上,可能有多个这样的小部件脚本…我没有污染全局范围。你救了我的命!经过一些小的修改,我最终得到了我的代码-见下文。