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.
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.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)
[ Voor 4% gewijzigd door shades op 09-12-2004 10:01 ]
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 ]
Dit gaat werken:
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,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); } }
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 ]
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
/^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 ]
Uit nieuwschierigheid:André schreef op donderdag 09 december 2004 @ 10:36:
Pelle gebruikt regexps en ik gewoon een string vergelijking, beide komen op hetzelfde neer
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
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 hetzelfdeAndré schreef op donderdag 09 december 2004 @ 10:36:
Pelle gebruikt regexps en ik gewoon een string vergelijking, beide komen op hetzelfde neer
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.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?
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.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).
Edit:
Plus wat Pelle zegt hierboven, ze kunnen veel sneller zijn zodra het iets moelijker word.
Eerste 2 dingen kloppen, maar dat het niet netjes is vind ik onzin, voor deze kwestie zijn beide manieren netjes.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
[ Voor 6% gewijzigd door André op 09-12-2004 10:56 ]
Op zich wel logisch, maar je zou het eigenlijk met een indexOf moeten testen (dus ook 123Item_1) matchen..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.
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.
Als jij met indexOf == 1 gaat matchen kan "item" ook alleen maar op de eerste plek staan en zal "123item" niet matchen.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
Denk trouwens dat die nog veel langzamer is.
Snap nu wat er gebeurd. Wel supercompact. Ga gelijk die tutor lezen. Interessant leesvoer.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:
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.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.
[ Voor 21% gewijzigd door shades op 09-12-2004 11:03 ]
De manier met item(x) is voor zover ik weet de officiele DOM-manier, dus vandaar. Maar je hebt gelijk, het werkt allebei primaAndré 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.
En bedanktAndré 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.
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.