Avatar billede elmoe Juniormester
27. august 2005 - 16:59 Der er 21 kommentarer og
1 løsning

document.write

Hvordan kan det være at når man skriver

<script>
document.write("hej med dig");
<script>

på en side, så bliver teksten skrevet på det pågældende sted på siden, men når man bruger document.write i en funktion (f.eks. som herunder), så bliver teksten skrevet på en helt ny tom side.

<script>
function minfunktion(){
    document.write("hej med dig");
}
<script>

Mit spørgsmål er så.
Hvad gør jeg for at få min tekst skrevet ud på min side når jeg vil bruge en funktion til det?
Avatar billede busschou Praktikant
27. august 2005 - 17:06 #1
Hvis du laver din funktion i head, så bliver den vel skrevet ud der hvor du kalder funktionen på din side
Avatar billede Slettet bruger
27. august 2005 - 17:24 #2
document.write uden funktionen gør at det bliver udført, når siden renderes.

Når du så efterfølgende kalder den inde fra en funktion, så er siden jo i forvejen renderet og dermed vil document.write "overskrive" dit oprindelige document, med indholdet af document.write
Avatar billede Slettet bruger
27. august 2005 - 17:32 #3
btw, kalder du funktionen udenom en event-handler (ex onclick osv), så vil det blive udført i dit oprindelige dokument.
Avatar billede elmoe Juniormester
27. august 2005 - 18:56 #4
jeg kalder den med en event-handler. har smidt koden i head, men det fungerer stadig ikke. den skriver det stadig på en ny side..
Avatar billede softspot Forsker
27. august 2005 - 22:27 #5
Ja, det er fordi renderingen af dit dokument er færdig på det tidspunkt hvor du udsører document.write og document bliver derfor overskrevet.

Hvis du laver en funktion og kalder den under selve renderingen af dokumentet vil den skrive output på den aktuelle side, ellers i et nyt dokument.

Hvis du vil ændre på det aktuelle dokuments indhold, skal du bruge de i DOM dertil indrettede funktioner, herunder innerHTML på det element du vil ændre indholdet af.

Eksempel:

<script type="text/javascript">
function skrivNytIndhold(objElement, strTekst)
{
  if(objElement)
  {
    objElement.innerHTML = strTekst
  }
}
</script>

<div id="nyTekstHer"></div>
<a href="java script:void(skrivNyTekst(document.getElementById('nyTekstHer'),'Nyt HTML-indhold i et dokument-element...'))">Indsæt nyt indhold</a>
Avatar billede softspot Forsker
27. august 2005 - 22:28 #6
"udsører"!!?? Det hedder vist nok udfører... =/
Avatar billede roenving Novice
28. august 2005 - 13:50 #7
-- og det kan da præciseres til, at man kun kan lave en document.write() til et åbent dokument !-)

-- så udføres en document.write under indlæsningen af dokumentet, vil dokumentet være åbent og skrivningen foregår bare der, hvor den er nået til ...

-- til gengæld vil dokumentet implicit blive lukket, når indlæsningen er overstået, og når der så senere udføres en document.write, vil javascript-motoren være nødt til at åbne dokumentet først, hvorved det allerede indlæste vil forsvinde !o]

-- og softspots eksempel kan glimrende bruges i alle de browsere, jeg kender, på trods af, at innerHTML egentlig aldrig har været at finde i nogen specifikation af javascript DOM-bindings ...

-- når vi begynder at kunne bruge xhtml vil det til gengæld blive nødvendigt at bruge de rigtige xhtml DOM-bindings, og vil f.eks. kunne se således ud:

<script type="text/javascript">
function skrivNytIndhold(objElement, strTekst){
  if(objElement){
    objElement.appendChild(document.createTextNode(strTekst));
  }
}
</script>
Avatar billede softspot Forsker
28. august 2005 - 13:56 #8
Tak for den præcisering roenving. Jeg var lidt i tvivl om innerHTML rent faktisk var en del af DOM-specifikationen, så jeg tog chancen - og fejlede ;)
Avatar billede roenving Novice
28. august 2005 - 14:05 #9
-- og der skal da medtages et simpelt trick til at undgå mærkelige gentagelser:

<script type="text/javascript">
function skrivNytIndhold(objElement, strTekst){
  if(objElement){
    objElement.firstChild.nodeValue = strTekst;
  }
}
</script>

<div id="nyTekstHer">&nbsp;</div>
<a href="java script:void(skrivNyTekst(document.getElementById('nyTekstHer'),'Nyt tekst-indhold i et dokument-element...'))">Indsæt nyt indhold</a>

-- bemærk &nbsp; i div-tagget, hvorved vi har en childNode, vi kan gøre noget ved !-)

-- bemærk også, at jeg ændrede teksten i funktionskaldet, for skal man benytte sig af html-elementer skal man helt ud i rigtig DOM-binding og skabe elementerne først, appende dem og eventuelt lægge f.eks. tekst-noder ind i !-)
Avatar billede elmoe Juniormester
28. august 2005 - 14:43 #10
Rigtig mange tak for de detaljerede svar, men kan det slet ikke gøres kortere? Det jeg skal, er at kalde en funktion der så bruger document.write() til at skrive noget ud på min side. Jeg skal jo slet ikke bruge xhtml eller noget af det andet (tror jeg da nok)..
Avatar billede softspot Forsker
28. august 2005 - 16:11 #11
Nøgleordet er vel: hvornår?

Under indlæsning af siden, eller efter?

Hvis det er efter, kan du ikke bruge document.write uden at ødelægge det eksisterende indhold...
Avatar billede elmoe Juniormester
29. august 2005 - 21:41 #12
okay! er ikke så erfaren med javascript og kan bare ikke få noget af jeres kode til at fungere. det er jo efter, når det er når jeg trykker på en knap som starter en funktion..
Avatar billede olebole Juniormester
29. august 2005 - 22:00 #13
<ole>

Prøv at lægge et link til siden, du tester på. Så er det nok lettere at forklare dig, hvad du gør galt  :)

/mvh
</bole>
Avatar billede roenving Novice
30. august 2005 - 00:30 #14
-- for du kan slet ikke benytte document.write() i et dokument, som alllerede findes !-)
Avatar billede elmoe Juniormester
25. maj 2006 - 21:32 #15
det eneste jeg vil vide er hvordan jeg får printet en tekst ud på en side. document.write("hello world") virker åbenbart ikke, så hvordan kan jeg så gøre det istedet for?
Avatar billede olebole Juniormester
26. maj 2006 - 02:27 #16
<ole>

softspot og roenving har hver især givet dig de to måder, du kan gøre det på ... og det så enkelt, som den slags kan gøres  :)

/mvh
</bole>
Avatar billede softspot Forsker
26. maj 2006 - 08:56 #17
Prøv at skifte dette link:

<a href="java script:void(skrivNyTekst(document.getElementById('nyTekstHer'),'Nyt tekst-indhold i et dokument-element...'))">Indsæt nyt indhold</a>


ud med dette:

<a href="java script:void(skrivNytIndhold(document.getElementById('nyTekstHer'),'Nyt tekst-indhold i et dokument-element...'))">Indsæt nyt indhold</a>

Jeg kom til at introducere en fejl i navnet på den funktion der kaldes... måske det er problemet...?
Avatar billede elmoe Juniormester
26. maj 2006 - 12:15 #18
Det virkede softspot. Synes godt nok det er utroligt at man er nødt til at skrive så meget, bare for at få en simpel tekst skrevet ud på et bestemt sted på en side i javascript.
Avatar billede softspot Forsker
26. maj 2006 - 12:19 #19
Ja, muligvis, men du kan så glæde dig over at funktionen er generisk og at du dermed kan bruge den mange forskellige steder :)
Avatar billede elmoe Juniormester
27. maj 2006 - 03:20 #20
Vil du ikke komme med et svar så du kan få points softspot? Tak for hjælpen!
Avatar billede softspot Forsker
27. maj 2006 - 16:32 #21
Jo, naturligvis - velbekomme :)
Avatar billede softspot Forsker
05. september 2006 - 11:39 #22
Tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester