2012-02-09 3 views
9

Как я могу узнать, что представляет собой элемент <script>?
В качестве примера, давайте рассмотрим этотКаков текущий элемент в Javascript?

<div> 
<script type="text/javascript"> 
    var time = new Date(), hrs = time.getHours(), min = time.getMinutes(); 
    document.write('It is '+hrs+":"+(min<10?'0':'')+min); 
</script> 
</div> 

Тогда, если я хочу, чтобы изменить это на что-то более современное, как я могу узнать, какой элемент мы в?
Так что я хочу написать, например, в JQuery

$(thisdiv).html('It is '+hrs+":"+(min<10?'0':'')+min); 

, но как я могу получить thisdiv?
Да, я знаю, я могу установить ID на нем, но у меня такое чувство, что это было бы необязательно. Браузер знает, где мы, иначе он даже не мог бы сделать document.write!

Итак, предложения? Я искал, но не мог найти его. Это так просто, что я не замечаю очевидного?

ответ

20

сценария выполняются в порядке их появления в документе. Содержимое тега скрипта оценивается при встрече, поэтому последний элемент <script> всегда является текущим.

Код:

<div> 
    <script> 
    var scriptTag = document.getElementsByTagName('script'); 
    scriptTag = scriptTag[scriptTag.length - 1]; 

    var parent = scriptTag.parentNode; 
    </script> 
</div> 
+0

+1, я не могу поверить, что я упустил эту довольно фундаментальную концепцию :( – danjah

+0

+1, Элегантное решение. – osahyoun

+0

Спасибо, я тоже не знал последний скрипт был последним в списке во время его выполнения, поэтому это решение я искал. И в качестве плюса он работает во всех браузерах, на которых я тестировал, даже Netscape 6. (Да, я такой, как этот .) –

0
$('script#some_id').parent().html('blah blah'); 
+2

* Да, я знаю, я могу поставить идентификатор на него, но у меня есть ощущение, что не было бы необходимости. * –

+0

Г-н Листер действительно упомянул, что не дал сценарию id, ранее на SO. Я искал аналогичное решение, потому что у меня много sc в документе, который требует знания «где они есть», лучшее, что я мог придумать, - установить уникальную случайную переменную в блоке сценария для идентификации доступа в других сценариях (http://stackoverflow.com/questions/3057628/как к самоидентифицировать-на-позиции в своем-скриптов теге-в-дом). Так что, возможно, id - это способ пойти ... с нетерпением наблюдая за вашим Q. – danjah

0

Попробуйте

<div id="mydiv"> 
<script type="text/javascript"> 
    var time = new Date(), hrs = time.getHours(), min = time.getMinutes(); 
    document.getElementById('mydiv').innerHTML = 'It is '+hrs+":"+(min<10?'0':'')+min; 
</script> 
</div> 
+1

* Да, я знаю, я могу установить ID на него, но у меня такое ощущение, что это было бы необязательно. * –

+0

ой, извините, что у меня не было получил это заявление, я думаю, что г-н Роб Уш ближе к вашему решению. –

1

Firefox:

document.currentScript.parentElement 

Chrome:

document.scripts.length