Avatar billede lolman Nybegynder
21. september 2007 - 19:37 Der 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>

Det der bliver alertet er kun "Teksten er her!"
Avatar billede w13 Novice
21. september 2007 - 19:41 #1
Hvis det bare er til test, kan du vel godt bruge innerHTML:
alert(document.getElementById("diven").innerHTML);

Hvad skal det bruges til?
Avatar billede kalp Novice
21. september 2007 - 19:44 #2
det vel bare

alert(document.getElementById("diven").nodeValue);
Avatar billede kalp Novice
21. september 2007 - 19:46 #3
hvis ikke så brug hellere
document.getElementById("diven").innerText);
end

document.getElementById("diven").innerHTML);
Avatar billede w13 Novice
21. september 2007 - 19:50 #4
Ja, medmindre Lolman vil have HTML med.
Avatar billede kalp Novice
21. september 2007 - 19:52 #5
yeps, men så bliver de ikke alert'et som opstillet der, men istedet vandret:)

så ja det kommer an på hvad han sigter efter
Avatar billede kalp Novice
21. september 2007 - 19:55 #6
Afhængig af elementernes niveau kan dette også være en løsning.

<div id="diven">
Teksten er her!<br />
Nu er den her!<br />
Og her!
</div>
<script type="text/javascript">
onload=function(){
var content = "";
var nodes = document.getElementById('diven').childNodes;
for(var i = 0; i < nodes.length; i++)
{
if(nodes[i].nodeValue != null)
content += nodes[i].nodeValue + '\n';
}
alert(content);
}
</script>
Avatar billede olebole Juniormester
21. september 2007 - 20:45 #7
<ole>

Hvis elementet indeholder HTML, er der ikke nogen valid måde at gøre det på ... med mindre, du har lyst til at skrive et større script

/mvh
</bole>
Avatar billede roenving Novice
22. september 2007 - 10:17 #8
var minDiv = document.getElementById("diven");
while(minDiv.firstChild)
  minDiv.removeChild(minDiv.firstChild);
Avatar billede roenving Novice
22. september 2007 - 10:18 #9
Ups, der så jeg forkert !-)

-- men den ide kan så bruges til at opbygge et nyt element, der kan vise det !o]
Avatar billede lolman Nybegynder
22. september 2007 - 15:03 #10
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.
Avatar billede w13 Novice
22. september 2007 - 15:13 #11
Lolman>> Skal der vises HTML-tags også, eller kun tekstindholdet?
Avatar billede kalp Novice
22. september 2007 - 15:24 #12
innerText er da ikke invalid... det er så vidt jeg ved kun innerHTML som ikke er en del af W3C DOM.

man bør ikke benytte innerHTML, men det er fristende når de fleste browsere alligevel understøtter den.
Avatar billede olebole Juniormester
22. september 2007 - 17:29 #13
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.

- valget er ikke så svært  :)
Avatar billede olebole Juniormester
22. september 2007 - 17:30 #14
- men hvad skal du bruge det til? Er det overhovedet nødvendigt at vide, hvilke elementer, der findes i div'et?
Avatar billede lolman Nybegynder
22. september 2007 - 20:48 #15
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.
Avatar billede lolman Nybegynder
22. september 2007 - 20:49 #16
Du kan se at midlertidigt bruger jeg innerHTML.

en anden lille ting jeg lige kom til at tænke på; er element.style.funktion="blala"; valid kodning?
Avatar billede w13 Novice
22. september 2007 - 20:53 #17
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.
Avatar billede olebole Juniormester
23. september 2007 - 00:02 #18
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>

<div id="templ">
    <div id="bordersTM" style="margin-left:6px">
        <div id="bordersTL">
            <div id="bordersTR">
                <div id="bordersTP">&nbsp;</div>
            </div>
        </div>
    </div>
    <div id="bordersMM" style="margin-left:6px">
        <div id="bordersLM">
            <div id="bordersRM">
                <div id="bordersBM">
                    <div id="bordersBL">
                        <div id="bordersBR"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>


<div class="box"><span style="display:none">her er titlen:200px</span>Her er indholdet</div>
Avatar billede olebole Juniormester
23. september 2007 - 00:03 #19
PS: du kan bare folde div'et 'templ' sammen på én linje. Jeg har bare foldet det ud for overskuelighedens skyld, så længe jeg skrev koden  :)
Avatar billede olebole Juniormester
23. september 2007 - 00:09 #20
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.
Avatar billede lolman Nybegynder
02. oktober 2007 - 09:28 #21
Tak olebole. Fed ide med at generere divsne ud fra et stykke kode i filen.

Bruger bare innerHTML. Vil du smide et svar.
Avatar billede olebole Juniormester
02. oktober 2007 - 12:22 #22
Det gør jeg  ;o)
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