Hoe waarde van element krijgen?

Pagina: 1
Acties:

  • kleautviool
  • Registratie: Mei 2003
  • Laatst online: 21-05 19:24
Ik heb nu een lijstje met items (dûh). Nu wil ik van elk item de waarde hebben, alleen heb ik geen idee hoe ik die te pakken krijg. Ik dacht zelf met nodeValue maar dit werkt niet. Ik heb ongeveer deze html:
HTML:
1
2
3
4
5
<ol>
  <li id="1"><p>Dit is dus de tekst die ik wil hebben</p></li>
  <li id="2"><p>Dit is dus de tekst die ik wil hebben</p></li>
  <li id="3"><p>Dit is dus de tekst die ik wil hebben</p></li>
</ol>


Ik heb nu zelf dit:

JavaScript:
1
2
3
4
function getValue(el)  {
     var ele = document.getElementById(el).firstChild.nodeValue;
     alert(ele);
}


Maar dit werkt niet. Heb wat lopen klooien met firstChild en lastChild enzo, maar kom er niet uit

Ik heb al op MSDN en in de GoT-search gezocht, maar heb geen andwoord kunnen vinden.

  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

Waarom heb je een <p> in je element staan? Dat zou je kunnen vervangen door helemaal niets en dat daaruit het element kunnen inlezen. Lijkt imho veel handiger. De styles kan je toch wel zetten daarmee.

Anders kan je wel door de childs lopen, maar dan krijg je wat ander gelazer met een paar browsers doordat zommige </> ook als een child zien :)

[ Voor 29% gewijzigd door disjfa op 07-03-2004 23:18 ]

disjfa - disj·fa (meneer)
disjfa.nl


  • kleautviool
  • Registratie: Mei 2003
  • Laatst online: 21-05 19:24
Ik heb die paragraaf daar staan, omdat daaronder nog een paragraaf tekst komt :)

  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

Dan is childnodes het antwoord. Daar kan je doorheen lopen en kijkend naar het type dan kan je bepalen dat je in de <p> zit :)

object.childnodes dus. En zoals ik al zei check even het type ;)

edit:
owja komt crisp weer stoer doen hoor ....

[ Voor 16% gewijzigd door disjfa op 07-03-2004 23:29 ]

disjfa - disj·fa (meneer)
disjfa.nl


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:01

crisp

Devver

Pixelated

een id mag nooit met een nummer beginnen
verder zoek je niet je firstChild, maar weer de firstChild daarvan; je zou ook dit kunnen doen:

JavaScript:
1
2
3
4
5
function getValue(el)  {
     var ele = document.getElementById(el).firstChild;
     while (ele.nodeType != 3) ele = ele.firstChild;
     alert(ele.nodeValue);
}


pas dan echter op met whitespace; je firstChild zou zomaar een spatie of linebreak kunnen zijn die verder geen childNodes heeft ;) je kan dan beter inderdaad al je childNodes afgaan totdat je zeker weet dat je je paragraph te pakken hebt, en daarvan dan firstChild.nodeValue nemen.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function getValue(el)  {

  var ele = document.getElementById(el).childNodes, i = 0, j = ele.length, p = null;
  while (i < j) {
    if (ele.item(i).nodeType == 1 && ele.item(i).tagName == 'P') {
      p = ele.item(i);
      break;
    }
    i++;
  }

  if (p != null) alert(p.firstChild.nodeValue);

}

[ Voor 59% gewijzigd door crisp op 07-03-2004 23:44 ]

Intentionally left blank


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

De achterliggende gedachte hierbij is dat een ElementNode nooit een nodeValue heeft, maar childnodes bevat. Elk van die childnodes kan o.a. weer een ElementNode of een TextNode zijn. De TextNodes zijn de DOM representatie van text en hebben daarom een nodeValue.

In dit voorbeeldje ziet de dom structuur er roughly zo uit:
code:
1
2
3
4
5
6
7
8
ElementNode (OL)
   - TextNode ("\n   ")
   - ElementNode (LI)
      - ElementNode (P)
         - TextNode ("Dit is dus de tekst die ik wil hebben")
   - TextNode ("\n   ");
   - ElementNode (LI)
     enz...


Let wel op dat IE het niet zo nauw neemt op de textnodes. Whitespace wordt (in de meeste gevallen) door IE genegeerd (wat crisp waarsch. ook bedoelt ;))

Zie ook w3.org voor meer info over DOM.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1