[js] id's zoeken in een document

Pagina: 1
Acties:

  • shades
  • Registratie: September 2001
  • Laatst online: 19-05 08:57
ik heb het volgende:
code:
1
2
3
4
for(var i =0; i< document.forms[0].elements.length; i++)
{
    document.write(document.forms[0].elements[i].name + '<br />');
}


Maar hier krijg ik alleen inputvelden mee en niet een hele zooi <div id="blabla"> objecten. Hoe kan dan dat ?

https://k1600gt.nl


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Om ten eerste je vraag te beantwoorden: je vraagt nu alle elementen op in een form object.

Wil je nou een overzicht van alle elementen met een ID, of uberhaupt alle elementen?

Of ben je op zoek naar 1 specifiek id, of een groep van elementen (bijvoorbeeld alle div's)

[ Voor 60% gewijzigd door BtM909 op 09-12-2004 09:54 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • shades
  • Registratie: September 2001
  • Laatst online: 19-05 08:57
BtM909 schreef op donderdag 09 december 2004 @ 09:51:
Om ten eerste je vraag te beantwoorden: je vraagt nu alle elementen op in een form object.

Wil je nou een overzicht van alle elementen met een ID, of uberhaupt alle elementen?

Of ben je op zoek naar 1 specifiek id, of een groep van elementen (bijvoorbeeld alle div's)
Ik heb opzoek naar alle <div> dingen waarvan het id begint met "item" (item_1, item_2 etc). Het beste lijkte me om dus alle id op te zoeken waarvan de naam begint met "item" maar het gaat dus om divs in dit geval.

[ Voor 4% gewijzigd door shades op 09-12-2004 10:01 ]

https://k1600gt.nl


Verwijderd

loopen met getElementById('item_'+i) ?

  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

code:
1
2
3
4
5
6
obj = document.getElementsByTagName("div")

for (var i = 0; i < obj.length; i++)
{
  if ( (obj[i].id).substr(0, 4) == "item") { //gevonden }
}

[ Voor 10% gewijzigd door André op 09-12-2004 10:36 . Reden: n = N ]


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 15:03

Pelle

🚴‍♂️

Niet zo netjes, André ;)

Dit gaat werken:
Java:
1
2
3
4
5
6
7
divs = document.getElementsByTagName("div");

for (var i = 0; i < divs.length; i++) {
    if (/^item/.test(divs.item(i).id)) {
        alert(divs.item(i).id);
    }
}

  • shades
  • Registratie: September 2001
  • Laatst online: 19-05 08:57
Pelle schreef op donderdag 09 december 2004 @ 10:21:
Niet zo netjes, André ;)

Dit gaat werken:
Java:
1
2
3
4
5
6
7
divs = document.getElementsByTagName("div");

for (var i = 0; i < divs.length; i++) {
    if (/^item/.test(divs.item(i).id)) {
        alert(divs.item(i).id);
    }
}
Wauw pelle,
Wat gebeurd er hier nou eigenlijk ? (/^item/.test() ??)
(voorbeeld van andre kan ik wel beredeneren)

[ Voor 67% gewijzigd door shades op 09-12-2004 10:28 ]

https://k1600gt.nl


  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Pelle gebruikt regexps en ik gewoon een string vergelijking, beide komen op hetzelfde neer ;)

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 15:03

Pelle

🚴‍♂️

Alles tussen / en / is een regular expression. Dat betekent dat je een bepaald patroon op kunt geven waaraan een string-variabele op getest moet worden. Voldoet de tekst aan het patroon, dan returnt de regex met testfunctie true, en voldoet de tekst niet aan het patroon dan is false het resultaat.

Een ^ betekent dat hetgeen er gezocht wordt, aan het begin van de string moet staan. Als je die weg zou laten dan zou hij ook
ook herkennen en dat is niet de bedoeling :)

/^item/ is dus de regular expression, test() is de functie die kijkt of een bepaalde string aan dat patroon voldoet, en divs.item(i).id is dus hetgeen waar je in wilt zoeken.

drm heeft ooit een kleine regex-tutorial geschreven: http://www.melp.nl/site/:content;tutorials;regex:

[ Voor 2% gewijzigd door Pelle op 09-12-2004 11:02 . Reden: url gefix0rd ]


  • Cyphax
  • Registratie: November 2000
  • Laatst online: 21:38

Cyphax

Moderator LNX
André schreef op donderdag 09 december 2004 @ 10:36:
Pelle gebruikt regexps en ik gewoon een string vergelijking, beide komen op hetzelfde neer ;)
Uit nieuwschierigheid:
Is een regexp dan niet een beetje overkill voor zo'n simpele vergelijking? Ik heb niet veel verstand van regexps maar ik heb weleens gelezen dat ze niet al te efficient zouden zijn?

Afgezien van het feit dat ik regexps lastig leesbaar vind en daardoor lastiger onderhoudbaar (maar dat is voor iemand die goed overweg kan met die dingen niet zo'n issue).

Saved by the buoyancy of citrus


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 15:03

Pelle

🚴‍♂️

André schreef op donderdag 09 december 2004 @ 10:36:
Pelle gebruikt regexps en ik gewoon een string vergelijking, beide komen op hetzelfde neer ;)
Ja en jij deed Tagname ipv TagName en je comment de } eruit, en je gebruikt niet de 'nette' manier om items uit een collectie te halen, maar verder is het idee hetzelfde :+

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 15:03

Pelle

🚴‍♂️

Cyphax schreef op donderdag 09 december 2004 @ 10:40:
Uit nieuwschierigheid:
Is een regexp dan niet een beetje overkill voor zo'n simpele vergelijking? Ik heb niet veel verstand van regexps maar ik heb weleens gelezen dat ze niet al te efficient zouden zijn?
Ik heb even een testje gedaan (100000 keer André's substring functie en 100000 keer mijn regex) en dat was 2790ms tegen 3224ms. De substring is dus ietsje sneller (zoals verwacht), maar zodra hetgeen je wilt matchen iets moeilijker is dan alleen een substring (bijv. wanneer je niet alleen item_1 wilt kunnen selecten maar ook melp_1), dan zijn regexes veeeeeel handiger dan wanneer je meerdere verschillende substrings moet testen.

  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Cyphax schreef op donderdag 09 december 2004 @ 10:40:
[...]

Uit nieuwschierigheid:
Is een regexp dan niet een beetje overkill voor zo'n simpele vergelijking? Ik heb niet veel verstand van regexps maar ik heb weleens gelezen dat ze niet al te efficient zouden zijn?

Afgezien van het feit dat ik regexps lastig leesbaar vind en daardoor lastiger onderhoudbaar (maar dat is voor iemand die goed overweg kan met die dingen niet zo'n issue).
Tja, overkill weet ik niet, ze zijn wel handig en ook best efficient mits je ze goed weet te schrijven. Dat ze niet makkelijk leesbaar en onderhoudbaar zijn klopt wel.

Edit:
Plus wat Pelle zegt hierboven, ze kunnen veel sneller zijn zodra het iets moelijker word.
Pelle schreef op donderdag 09 december 2004 @ 10:41:
[...]

Ja en jij deed Tagname ipv TagName en je comment de } eruit, en je gebruikt niet de 'nette' manier om items uit een collectie te halen, maar verder is het idee hetzelfde :+
Eerste 2 dingen kloppen, maar dat het niet netjes is vind ik onzin, voor deze kwestie zijn beide manieren netjes.

[ Voor 6% gewijzigd door André op 09-12-2004 10:56 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Pelle schreef op donderdag 09 december 2004 @ 10:54:
[...]
Ik heb even een testje gedaan (100000 keer André's substring functie en 100000 keer mijn regex) en dat was 2790ms tegen 3224ms. De substring is dus ietsje sneller (zoals verwacht), maar zodra hetgeen je wilt matchen iets moeilijker is dan alleen een substring (bijv. wanneer je niet alleen item_1 wilt kunnen selecten maar ook melp_1), dan zijn regexes veeeeeel handiger dan wanneer je meerdere verschillende substrings moet testen.
Op zich wel logisch, maar je zou het eigenlijk met een indexOf moeten testen (dus ook 123Item_1) matchen..

Ben benieuwd welke wint :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

BtM909 schreef op donderdag 09 december 2004 @ 10:56:
[...]

Op zich wel logisch, maar je zou het eigenlijk met een indexOf moeten testen (dus ook 123Item_1) matchen..

Ben benieuwd welke wint :)
Als jij met indexOf == 1 gaat matchen kan "item" ook alleen maar op de eerste plek staan en zal "123item" niet matchen.

Denk trouwens dat die nog veel langzamer is.

  • shades
  • Registratie: September 2001
  • Laatst online: 19-05 08:57
Pelle schreef op donderdag 09 december 2004 @ 10:40:
Alles tussen / en / is een regular expression. Dat betekent dat je een bepaald patroon op kunt geven waaraan een string-variabele op getest moet worden. Voldoet de tekst aan het patroon, dan returnt de regex met testfunctie true, en voldoet de tekst niet aan het patroon dan is false het resultaat.

Een ^ betekent dat hetgeen er gezocht wordt, aan het begin van de string moet staan. Als je die weg zou laten dan zou hij ook <div id="123itemabc"> ook herkennen en dat is niet de bedoeling :)

/^item/ is dus de regular expression, test() is de functie die kijkt of een bepaalde string aan dat patroon voldoet, en divs.item(i).id is dus hetgeen waar je in wilt zoeken.

drm heeft ooit een kleine regex-tutorial geschreven: http://www.melp.nl/site/:content;tutorials;regex:
Snap nu wat er gebeurd. Wel supercompact. Ga gelijk die tutor lezen. Interessant leesvoer.
André schreef op donderdag 09 december 2004 @ 10:57:
[...]

Als jij met indexOf == 1 gaat matchen kan "item" ook alleen maar op de eerste plek staan en zal "123item" niet matchen.

Denk trouwens dat die nog veel langzamer is.
Ik had in dit geval de substring gekozen, anders, als het ergens in het id had gestaan de indexof. Maar ik vind de schrijfwijze van pelle wel super. Ik houd wel van compacte scripts.

[ Voor 21% gewijzigd door shades op 09-12-2004 11:03 ]

https://k1600gt.nl


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 15:03

Pelle

🚴‍♂️

André schreef op donderdag 09 december 2004 @ 10:55:
Eerste 2 dingen kloppen, maar dat het niet netjes is vind ik onzin, voor deze kwestie zijn beide manieren netjes.
De manier met item(x) is voor zover ik weet de officiele DOM-manier, dus vandaar. Maar je hebt gelijk, het werkt allebei prima :)

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

André schreef op donderdag 09 december 2004 @ 10:57:
[...]

Als jij met indexOf == 1 gaat matchen kan "item" ook alleen maar op de eerste plek staan en zal "123item" niet matchen.

Denk trouwens dat die nog veel langzamer is.
En bedankt :P had het natuurlijk over >0 ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 15:03

Pelle

🚴‍♂️

indexOf is inderdaad nog sneller, die komt op 1906ms.
Pagina: 1