2011-08-03 11 views
7

muszę napisać skrypt, który będzie używać document.write produkować jakieś wyjście, ale muszę wiedzieć, co to jest pierwiastek zawarty, przykład:Get elementu DOM gdzie tag skrypt jest

<p> 
    paragraph 1 
    <script src="test.js" type="text/javascript"></script> 
</p> 

muszę Uzyskaj odniesienie do tagu p ...

dziękuję!

+1

wszelkie wywołania document.write w test.js wyprowadzałyby ich wyniki dokładnie w miejscu, gdzie znajduje się znacznik skryptu. Chyba, że ​​chcesz wstawić tekst PRZED tekstem "akapitu 1" ... –

+0

Wiem, ale muszę znać treść znacznika p, aby zapisać wynik ... – Gustav

+0

w jquery, coś jak skrypt '$ (" [@ src = 'test.js'] "). parent ('p')' zrobiłoby lewę. –

Odpowiedz

11

W momencie uruchomienia skryptu, dokument jest tylko częściowo załadowany. Tak więc twój element skryptu byłby ostatnim węzłem w dokumencie:

var target = document.documentElement; // start at the root element 
while (target.childNodes.length && target.lastChild.nodeType == 1) { // find last HTMLElement child node 
    target = target.lastChild; 
} 
// target is now the script element 
alert(target.parentNode); // this is p 
+0

dzięki! Właśnie tego potrzebowałem. – Gustav

+5

Jednak nie zawsze tak jest, np. wstawienie nowego elementu '

-1

Dlaczego po prostu nie wstawić identyfikatora do odpowiedniego znacznika p?

<p id="desiredTag"> 
    paragraph 1 
    <script src="test.js" type="text/javascript"></script> 
</p> 

Następnie można zrobić getElementById("desiredTag") lub $("#desiredTag").

+2

Treść może być dynamiczna, gdy nie można dodać id/klasy do rodzica, w przeciwnym razie najłatwiej byłoby naprawić. –

8

Przykład:http://jsfiddle.net/NqN3S/

<p> 
    paragraph 1 
    <script id="test" type="text/javascript"> 
     var scpt = document.getElementById("test"); 
     var p = scpt.parentNode; 
     p.removeChild(scpt); 
     alert("old content: " + p.innerHTML); 
     p.innerHTML = "some new content"; 
    </script> 
</p> 
Powiązane problemy