21. september 2007 - 19:37Der er
21 kommentarer og 1 løsning
Hele indholdet fra div.
Hej!
Har prøvet, men kan ikke finde ud af hvordan jeg kan alerte hele indholdet fra et div felt!
Har prøvet!:
<div id="diven"> Teksten er her!<br /> Nu er den her!<br /> Og her! </div> <script type="text/javascript"> onload=function(){ alert(document.getElementById("diven").firstChild.nodeValue); } </script>
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Vil helst have at det skal være på en valid måde, så innerHTML/-TEXT duer ikke. Olebole > mht. et script der ville være valid, hvordan tænker du dig at sådan et ville være. Prøver lige at se på de andre foreslag.
kalp >> Hverken innerText eller innerHTML har nogensinde været valide. De er begge buldrende invalide - og har alle dage været det! Det kan aldrig være fristende at bruge innerHTML. Den er buggy, når der aflæses - ikke mindst i FF - og man ødelægger sine øvrige script-muligheder, hvis man bruger den til at indsætte med.
lolman >> De invalide forslag, jeg kunne forestille mig, omhandler brug af innerHTML.
Hvis du i forvejen bruger font- og center-tags, laver layout med store, nestede tabel-helveder, bruger deprecatede HTML-attributes i stedet for CSS, samt udelader brug af DTD, så passer innerText og innerHTML som fod i hose til din kodestil. Er det ikke tilfældet, holder du dig naturligvis lysår væk fra de to properties.
olebole > Min side er bygget op af div-tags og stylesheet, den overholder både w3c's HTML 4.01 og CSS standarder.
Mht. min div: Diven kan indeholde al form for kode. Jeg skal læse indholdet, gemme det i en variabel (Med HTML-tags), fjerne indholdet fra diven, tilføje nogle elementer i diven og derefter igen skrive i det inderste element. Hidtil ser min kode sådan ud: -- function createBox() { var div = document.getElementsByTagName("div"); for (var i=0;i<div.length;i++) { if (div[i].getAttribute("class") == "box") { var header = div[i].getAttribute("rel").split(":")[0]; var wsize = div[i].getAttribute("rel").split(":")[1]; div[i].style.width=wsize; var txt = div[i].innerHTML; div[i].innerHTML=""; var borderTM = document.createElement("div"); var borderTL = document.createElement("div"); var borderTR = document.createElement("div"); var borderTP = document.createElement("div"); var borderLM = document.createElement("div"); var borderMM = document.createElement("div"); var borderRM = document.createElement("div"); var borderBM = document.createElement("div"); var borderBL = document.createElement("div"); var borderBR = document.createElement("div"); borderTM.setAttribute('id','bordersTM'); borderTL.setAttribute('id','bordersTL'); borderTR.setAttribute('id','bordersTR'); borderTP.setAttribute('id','bordersTP'); borderLM.setAttribute('id','bordersLM'); borderMM.setAttribute('id','bordersMM'); borderRM.setAttribute('id','bordersRM'); borderBM.setAttribute('id','bordersBM'); borderBL.setAttribute('id','bordersBL'); borderBR.setAttribute('id','bordersBR'); div[i].appendChild(borderTM); borderTM.appendChild(borderTL); borderTL.appendChild(borderTR); borderTR.appendChild(borderTP); div[i].appendChild(borderMM); borderMM.appendChild(borderLM); borderLM.appendChild(borderRM); borderRM.appendChild(borderBM); borderBM.appendChild(borderBL); borderBL.appendChild(borderBR); borderTP.innerHTML = header; borderBR.innerHTML=txt; borderTM.style.marginLeft=6+"px"; borderMM.style.marginLeft=6+"px"; } } } onload=function(){ createBox(); } -- hvis jeg så laver et div tag: -- <div class="box" rel="her er titlen:200px">Her er indholdet</div> -- Så generer den en box der er 200px bred og som der for en overskrift, nogle runde hjørner og noget andet lir.
Style.noget er validt ja, men hvis du f.eks. sætter src på et billede, kan du gøre det mere validt sådan her: element.setAttribute("src","/images/hej.gif"); Det kan dog ikke gøres med style, onclick/onkeypress/osv, og der er et par andre undtagelser ved brugen af setAttribute og getAttribute.
Attributten 'rel' giver ingen mening på et div - og er ikke valid. Derfor må du vælge en anden løsning, som kunne være denne: <div class="box"><span style="display:none">her er titlen:200px</span>Her er indholdet</div>
Dernæst vil din funktion lave flere elementer med samme ID ... det holder ikke. ID'er skal være unikke i dokumentet - ligesom vores personnumre er det indenfor nationen.
Jeg tror desuden jeg ville lave en HTML-struktur, som fjernes, når siden loader - og efterfølgende bruge den som template:
<script type="text/JavaScript"> function createBox() { var div = document.getElementsByTagName("div"); for (var i=0;i<div.length;i++) { if (div[i].className == "box") { var aData = div[i].getElementsByTagName("span")[0].firstChild.nodeValue.split(":"); // Fjern evt. spannet her, hvis ikke det skal buges længere div[i].style.width = aData[1]; var a, id, oF = document.createDocumentFragment(); for (var m=div[i].childNodes.length-1; m>=0; m--) { oF.insertBefore(div[i].childNodes[m], oF.firstChild); } for (var m=0,n=oTmpl.childNodes.length; m<n; m++) { div[i].appendChild( oTmpl.childNodes[m].cloneNode(true) ); } a = div[i].getElementsByTagName("div"); for (var m=0,n=a.length; m<n; m++) { id = a[m].getAttribute("id"); if (id!="") a[m].setAttribute("id", id+nInx); } document.getElementById("bordersBR"+nInx).appendChild(oF); document.getElementById("bordersTP"+nInx).firstChild.nodeValue = aData[0]; nInx++; } } } var nInx = 0; var oTmpl = null; onload = function(){ oTmpl = document.getElementById("templ"); oTmpl.parentNode.removeChild(oTmpl); createBox(); } </script>
Al ære værd, at du bruger: if (div[i].getAttribute("class") == "box") {
Problemet er bare, at det går som forventet i FF, mens IE vil have: if (div[i].getAttribute("className") == "box") {
Jeg har personligt valgt at bruge: if (div[i].className == "box") {
- indtil man bliver enige ... uagtet, det ikke er validt i forhold til XML og HTML's fælles DOM :) Det samme gælder kontrol-elementer i en form, hvor man ikke kan læse dynamiske værdier med getAttribute.
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.