ссылка на элемент, вставленный document.write - PullRequest
0 голосов
/ 28 марта 2012

Я создал элемент во внешнем файле javascript:

var element = document.createElement('div');

Теперь мне нужно добавить элемент к телу и сохранить ссылку на него (переменная element).Но мне нужно добавить его сразу после тега скрипта - как это сделал бы document.write().

Я не могу использовать классы и идентификаторы для скрипта и самого элемента - я не на своем сайтеможет быть несколько таких сценариев.

Как решить такую ​​задачу?КОНТЕКСТ: Я хочу создать некоторые виджеты, которые могли бы использоваться на других сайтах.

Ответы [ 4 ]

1 голос
/ 28 марта 2012

Как насчет этого:

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 голосов
/ 28 марта 2012

Я закончил с этим источником:

Определения для моей структуры (я думаю, что это справедливо):

  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({});
0 голосов
/ 28 марта 2012

Когда вы создаете новый элемент, вы присваиваете ему значение variableName.Таким образом, вы можете использовать само имя переменной для ссылки на переменную.

0 голосов
/ 28 марта 2012

только создание элемента недостаточно. используйте 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);
}

Ссылка: от Mozilla

...