2012-03-28 90 views
0

插入元件I在外部JavaScript文件創建的元素。
但是我需要在腳本標記之後追加它 - 就像document.write()會這樣做。參照由文件撰寫

我不能使用類和id的腳本和元素本身 - 我不在我的網站上,並可能有多個這些腳本。

如何解決這樣的任務?

背景:我想要構建一些可以在其他網站上使用的小部件。

+0

爲什麼不讓用戶決定放置這些小部件的位置? – 2012-03-28 11:20:58

+0

他們通過包含腳本標記來決定將其放置在何處。就像youtube使用iframe嵌入代碼一樣。不幸的是,我不能使用iframe。 – czerasz 2012-03-28 11:31:01

回答

1

如何:

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; 
    } 
} 

編輯:我編輯我的代碼。試試看!

+0

你救了我的生活!經過一些小的修正後,我結束了我的代碼 - 見下文。 – czerasz 2012-03-28 13:03:07

+0

太棒了,我喜歡它,你如何拿起我的想法。做得好! – Amberlamps 2012-03-28 13:33:44

0

只有創建元素是不夠的。使用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); 
} 

編號:from mozilla

+0

...我不能使用類和id的腳本和元素本身 - 我不在我的網站上,並可能有多個腳本.... – czerasz 2012-03-28 11:33:18

0

當您創建新的元素,你將其分配給一些VARIABLENAME。所以你可以使用變量名本身作爲變量的引用。

+0

我不污染全球範圍。 – czerasz 2012-03-28 11:49:15

0

我結束了與此源:

定義爲我的框架(我認爲有公平):

  1. 每個插件腳本標籤有一個myNamespace-widget-script
  2. 有一個全局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({});