2013-06-09 4 views
0

У меня есть сценарий, который я даю клиентам. Клиент может поместить его куда угодно в свой html-элемент. Он может быть помещен между div, td, p или что-либо подобное.как обернуть существующий, но неизвестный элемент

Скрипт выглядит примерно так:

<script id="myExample" src="http://www.mydomain.com/example.js" ></script> 

Теперь, в «example.js» Я хочу, чтобы обернуть мой сценарий динамически.

Я пытался что-то вроде:

// create the container div 
$("#myExample").wrap('<div></div>'); 
document.getElementById("myExample").firstChild.setAttribute("id","myExampleContainer"); 

... но я получаю сообщение об ошибке:

TypeError: document.getElementById(...).firstChild is null 

Может обертывание настоящий элемент (который является JS) с DIV и давая обертке идентификатор?

ОБНОВЛЕНИЕ: см. Ответ Мусы, внизу.

Два рабочих растворов:

// create the container div 
$("#myExample").wrap('<div></div>'); 
document.getElementById("myExample").parentNode.setAttribute("id","myExampleContainer"); 

... или:

$("#myExample").wrap('<div id="myExampleContainer"></div>'); 
+0

Do вы действительно ожидаете, что тег скрипта будет иметь дочерние элементы? – adeneo

+0

Point принят. Я собираюсь исправить свой вопрос и ответить. Я сказал что-то не так. – TARKUS

ответ

1

Обертка является родителем #myExample не ребенок, так что вам придется сделать

document.getElementById("myExample").parentNode.setAttribute("id","myExampleContainer"); 

http://jsfiddle.net/awz8U/1/
или просто добавить идентификатор в DIV

$("#myExample").wrap('<div id="myExampleContainer"></div>'); 

http://jsfiddle.net/awz8U/2/

+0

Вы совершенно правы. Спасибо. Другой ответ не был неправильным, учитывая то, что я сказал. Но ваш ответ - рабочий. – TARKUS

1

Должно быть childNodes вместо firstChild:

document.getElementById("myExample").childNodes[ 0 ].setAttribute... 

Но не забудьте проверить, если родитель имеет дочерние узлы:

if(document.getElementById("myExample") && document.getElementById("myExample").childNodes.length) { 
    // some stuff here... 
} 
+0

Прохладный, я попробую это. – TARKUS

+1

'# myExample' - это узел скрипта, у него нет детей. – Barmar

+0

Да, я старался никогда не работать. Я собираюсь обновить то, что я сделал, чтобы исправить это, основываясь на ответах и ​​комментариях. – TARKUS

1
$("myExample").wrap($("<div/>", { id: "myExampleContainer" })); 
+0

Это интересный способ использования параметра, спасибо! – TARKUS

Смежные вопросы