2010-06-16 3 views
1

Возможно, это лучший способ сделать это, но в настоящее время у меня есть хорошо инкапсулированный объект JavaScript, который может иметь некоторые настраиваемые параметры. Я включаю фрагмент HTML-кода на странице (через фрагменты Dreamweaver), а на странице загружается мой JS-файл, который проходит через DOM и идентифицирует любой из этих фрагментов кода как определенную функциональность, и идет вперед и устанавливает эту функциональность.Как идентифицировать позицию тега скрипта в DOM?

Это все, что мне нужно, чтобы добавить несколько объектов на страницу и настроить их. Важным моментом здесь является то, что вы можете добавить столько объектов на страницу, как вам нравится, с моей текущей настройкой - потому что они являются общими в этой точке и не имеют атрибута «id».

Теперь я хочу настроить эти объекты, поэтому я подумал: «Как насчет внешнего файла, содержащего настройки конфигурации, которые эти объекты проверяют и применяют, если найден объект конфигурации». Это тоже хорошо работает, но данные конфигурации теперь немного «удалены». Я предполагаю, что это будет раздражать для моих коллег в конце концов, это просто еще одна вещь для запоминания.

Так что, к моему вопросу, я с удовольствием вставляю эти кодовые блоки, которые по-прежнему будут запускать объекты самоинструментации при загрузке страницы. Но то, что я хотел бы попробовать, также вставляет блок сценариев, содержащий настройки конфигурации. Мне нужно средство для этого вставленного блока кода, зная, что его родительский элемент является контекстом для конфигурации.

Пример кода:

<div class="snippet"> 
    <_contents of this 'snippet'_/> 
    <script type="text/javascript"> 
     new Snippet().init({ 
      rootElement: REFERENCE_TO_THIS_SCRIPT_TAGS_PARENT_NODE, 
      configOptionA: true, 
      configOptionB: false 
     }); 
    </script> 
</div> 

Примечание: <div class="snippet"> не имеет атрибут «ID» на цели, потому что я хочу, чтобы позволить более чем одного из них, чтобы быть отброшен на страницу.

Другие решения приветствуются, пока они придерживаются моих ограничений!

ответ

0

My other related question (теперь ответили) адрес это сейчас, по существу, я закончил с:

<div class="snippet"> 
    <elements... /> 
    <script type="text/javascript"> 
     var tmpVarName = 'configOb_'+Math.floor(Math.random()*1111111) ; 
     document[tmpVarName] = { 
      remainVisible:true, 
      hoverBehaviour:false 
     };   
    </script> 
</div> 

..., а затем в скрипте нагруженного на каждой странице, которая сканирует для любых соответствующих элементов для создания экземпляра и конфигурации:

var snippets = yd.getElementsBy(function(el){ 
        return yd.hasClass(el, "snippet"); 
       },null,document); 
for(var i=0; i<snippets.length;i++) 
{ 
    var s = snippets[i] ; 
     yd.generateId(s, '_snippet_'+i); 
    var tag = yd.getElementBy(function(el){ 
       return true; 
      },'script',s); 
    var ob = new Snippet(); 
     ob.setId(s.id); 
     ob.init(eval(tag.innerHTML)); 
} 

Для более полного контексте приведенного выше кода;

  • ярд = YAHOO.util.Dom
  • Snippet.init() и Snippet.setId() подвергаются методы объекта модуля под названием Snippet()

Теперь, когда мои вставленные куски» 'контента не имеют атрибута id и динамически оцениваемых контекстных объектов конфигурации. Я могу добавить столько вариантов, сколько мне нравится. Моя единственная реальная проблема - это производительность, если на мою страницу добавлена ​​целая куча этих объектов Snippet() (маловероятно).

+0

Rob W передал основное понятие здесь недавно: http://stackoverflow.com/questions/9209823/what-is-the-current-element-in-javascript – danjah