02. august 2005 - 15:27Der er
19 kommentarer og 1 løsning
Hjælp med insertBefore
Hej, jeg har fundet denne kode (Fundet på eksperten.dk) Koden er perfekt til mit formål, bare ud over at det ligger i en tabel. Så jeg vil høre om der er nogen der kan lave en kode der gør det samme, men ligger det i en div/font/h(1-7) eller lign
Koden ser således ud:
<style type="text/css"> td{border:1px solid #500;} </style> <script type="text/javascript"> var numrows = 12; var actRow = lastRow = 0;
function addDeleteRow(){ var tbl = document.getElementById('chatTable'); if(actRow+1==lastRow+numrows){ var delrow = document.getElementById('row' + lastRow++); tbl.removeChild(delrow); } var addrow = document.getElementById('row' + actRow++); var newrow = document.createElement('TR'); newrow.id = "row" + actRow; tbl.insertBefore(newrow,addrow); var newcell = document.createElement('TD'); newrow.appendChild(newcell); newcell.innerHTML = actRow + ". række"; } </script>
altså at det ikke er i en table, men bare en div, da der kommer for meget mellemrum mellem de nye linier. Og så skal den nyeste være øverst (ligesom i koden)
Skal jeg formulerer mere, eller?? (Er ikke så god til at forklare ;)..)
Synes godt om
Slettet bruger
02. august 2005 - 19:20#3
ok jeg prøver en anden fremgangs metode. Jeg har en kode som tilføjer en ny linie i en div, men den laver den nyeste nederst, og det er det jeg vil ha lavet om (med noget insertBefore) Her kommer koden:
function Skrivbesked(Beskeden) { var Besked=document.createElement('DIV') Besked.innerHTML=Beskeden document.getElementById("Beskeder").appendChild(Besked);
Da appendChild per definition indsætter "barnet" som det sidste i rækken er det meget logisk, at outputten bliver sådan. DOM har midlertidig netop en insertBefore funktion, som gør det muligt at omgå det problem: <script type="text/javascript">
function Skrivbesked(Beskeden) { var Besked=document.createElement('DIV'); Besked.appendChild(document.createTextNode("Besked")); document.body.insertBefore(Besked,document.getElementById("Beskeder")); } </script>
hmm, ja jeg har åbenbart brugt insertBefore forkert i den sammenhæng. Kan ikke lige finde ud af hvordan det løses i lige det script, men vi kunne jo skifte lidt strategi: <div id="Beskeder"></div> <script type="text/javascript"> function Skrivbesked(Beskeden) { var Besked=document.createElement("DIV"); Besked.appendChild(document.createTextNode(Beskeden)); var parentNode = document.getElementById("Beskeder"); parentNode.insertBefore(Besked,parentNode.firstChild); } </script> <form> <textarea name="tekst"></textarea> <input type="button" value="Tilføj" onclick="Skrivbesked(this.form.tekst.value);"> </form>
Her bruges div'en med id'en Beskeder som pladsholder for de forskellige beskeder du indsætter. I dette tilfælde fungerer insertBefore som vi vil ha' det.
Synes godt om
Slettet bruger
02. august 2005 - 20:58#7
Ahh nice, kan du eventuelt lave det så det virker med html?
hvad mener du med virker med html? Hvis du vil indsætte html-kode, så kunne du jo evt. bare gå tilbage og bruge innerHTML istedet for createTextNode metoden. Den brugte jeg bare for at være lidt på forkant med fremtidens xhtml2 hvor innerHTML og andet ikke standardhalløj ikke blive blive understøttet.
Synes godt om
Slettet bruger
02. august 2005 - 23:52#9
hmmm det virker ikke, dette: Besked.appendChild(document.innerHTML(Beskeden));
Hvis andet argument i insertBefore har værdien null, tilføjes elementet i første argument som den første childNode til objektets element. I modsat fald tilføjes det før elementet i andet argument:
<script type="text/JavaScript"> function insMsg() { var cont, msg, dv, tx; cont = document.getElementById("beskeder"); msg = document.getElementById("besked").value; dv = document.createElement("div"); tx = document.createTextNode(msg); dv.appendChild(tx); cont.insertBefore(dv, cont.firstChild); } </script>
øhhh, tak, tror jeg nok? Men ved du hvordan jeg få den til at udskrive html´en som html og ikke som tekst.
Dette virker ikke: Besked.appendChild(document.innerHTML(Beskeden)); Den ser således ud rigtigt: Besked.appendChild(document.createTextNode(Beskeden));
- men "kan du eventuelt lave det så det virker med html?" tyder på, du har misforstået det at arbejde med DOM :) Når man manipulerer dokumentets DOM, arbejder man med alle dokumentets bestanddele som selvstændige noder. I den forbindelse kan man ikke bruge HTML i form af tekststrenge.
Til gengæld kan man lave en slags template sytem, hvor man kloner en større HTML-struktur og indsætter tekststrenge med DOM:
På den måde slipper man for at skrive en kode på længde med en halv Koran og Det Nyt Testamente for at oprette en bunke elementer - og fylde dem med tekst. HUSK, at en ID altid skal være unik i dokumentet, hvorfor alle ID'er i din template skal ændres til en tom streng - eller en unik ID - når der klones.
Dette er blot et simpelt eksempel, men det kan udbygges på mange måder - alt efter opgaven :)
Problemet er nok, at du har fat i den helt forkerte ende af dit projekt :)
Når man skriver en script-chat, har man gang i at skrive noget af det aller mest resourcekrævende, man overhovedet kan belaste en server med ... hvorfor det i øvrigt er svært at finde en udbyder, der tillader den slags ;o)
Det er meget vigtigt at hvert kald til serveren, belaster så lidt, som overhovedet muligt. Derfor sender man _kun_ rå data frem og tilbage - f.eks. i form af XML. Du skal under alle omstændigheder foretage al HTML-formatering på klienten ... endelig ikke på serveren.
Derudover bør du sørge for, at du kun lader brugern hente de beskeder, han endnu ikke har set - f.eks. ved hjælp af et timestamp, der enten sendes med frem og tilbage, eller lægges i en cookie.
Til sidst er det vigtigt at din DB er optimeret og indekseret i forhold til dine SQL-kald - som naturligvis også skal være top-tunet ... f.eks. har du forhåbentlig ingen *'er i dine kald, vel? ;o)
Sprog som ASP og PHP er i virkeligheden komplet uegnede til chat-applikationer - men hvis man insisterer på at skrive én, skal men _virkelig_ holde tungen lige i munden :)
Synes godt om
Slettet bruger
03. august 2005 - 03:15#14
Du har ret i, at jeg er igang med at lave en chat, og det virker perfekt, men den udskriver det som ren tekst, og det ser dumt ud, jeg bruger både <b> og forskellige farver :(
Synes godt om
Slettet bruger
05. august 2005 - 01:54#15
nå, men når ingen svarer må jeg finde ud af det på anden vis. Hvis i vil ha points så lav et svar.
Du har det vel som en rimelig fast skabelon, så kan det jo ikke tage så lang tid at lave en funktion, som genskaber den funktionalitet, du ellers har lavet i det serverside script !-)
Synes godt om
Slettet bruger
05. august 2005 - 14:20#17
Mit problem er bare at jeg ikke aner noget som helst om Javascript, jeg kan kun asp/php html og css :( så aner ikke hvordan jeg skal lave det til mit behov :(
-- hvis du kan lave det i php er der en chance for at du kun skal ændre nogle objekt-referencer for at få det til at fungere i javascript !-)
Synes godt om
Slettet bruger
06. august 2005 - 09:47#19
hele chatten er lavet i asp, da det er mit hoved sprog, men det virker også, udover lige at den ikke viser feks <b></b> som html men bare som text :(
Synes godt om
Slettet bruger
09. april 2006 - 11:30#20
lukker
Synes godt om
Ny brugerNybegynder
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.