2012-02-09 19 views
9

Jak mogę się dowiedzieć, co jest elementem, w którym znajduje się <script>?
Jako przykład weźmy tenJaki jest obecny element w 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> 

Następnie, jeśli chcę zmienić na coś bardziej nowoczesnego, jak mogę dowiedzieć się, co jesteśmy w pierwiastek?
Więc chcę pisać, na przykład w jQuery

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

ale jak mogę thisdiv?
Tak, wiem, mogę umieścić na nim identyfikator, ale mam wrażenie, że nie byłoby to konieczne. Przeglądarka wie, gdzie jesteśmy, inaczej nie mógłby nawet zrobić document.write!

A więc, sugestie? Szukałem, ale nie mogłem go znaleźć. Czy to takie proste, że przeoczyłem oczywistość?

Odpowiedz

20

Script są wykonywane w kolejności występowania w dokumencie. Treść znacznika skryptu jest oceniana na spotkaniu, więc ostatni element <script> jest zawsze aktualny.

Kod:

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

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

+1, nie mogę uwierzyć, że przeoczyłem tę dość fundamentalną koncepcję :( – danjah

+0

+1, eleganckie rozwiązanie – osahyoun

+0

Dziękuję! Nie wiedziałem też, że najnowszy skrypt był ostatnim na liście, podczas jego wykonywania, więc to rozwiązanie szukałem, a jako plus działa na wszystkich przeglądanych przeze mnie przeglądarkach, nawet w Netscape 6. (Tak, jestem taki dokładny .) –

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

* Tak, wiem, mogę umieścić identyfikator na nim, ale mam wrażenie, że nie byłby konieczny. * –

+0

Pan Lister wspomniał, że nie nadaje skryptowi id, wcześniej na SO Szukałem podobnego rozwiązania, ponieważ mam wiele sc ript els w dokumencie, który wszyscy wymagali znajomości "gdzie są", najlepiej wymyślić ustawienie wyjątkowo losowego var w bloku skryptu w celu identyfikacji dostępu w innych skryptach (http://stackoverflow.com/questions/3057628/how-to-self -identyfikacja-pozycji-skryptu-tag-in-the-dom). Więc może id's idą do przodu ... chętnie oglądają twoje Q. – danjah

0

Spróbuj

<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

* Tak, wiem, mogę umieścić na nim identyfikator, ale mam wrażenie, że nie byłoby to konieczne. * –

+0

oh przepraszam, że nie miałem Mam to zdanie, myślę, że pan Rob W jest bliżej twojego rozwiązania –

1

Firefox:

document.currentScript.parentElement 

Chrome:

document.scripts.length 
Powiązane problemy