Archief - JS: Meerdere div's in één keer besturen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Cyberkef

Legacy Member
Hey,

Voor de spoilertag hier op het forum zou ik graag een knopje [Show All] bijtoveren, die in één keer alle spoilerdiv's van gans de pagina kan tevoorschijn toveren.

Hoe je één div kan veranderen van display is mij volkomen duidelijk, maar hoe je correct meerdere div's kan aansturen is een ander paar mouwen (ben zeker geen javascript held).

Met getelementbyid() geeft enkel de eerste div terug, dus dat gaat al niet.

Als ik nu werk met <div name="div_bb_spoiler" ...>...</div> (waarbij dus meerdere div containers zelfde naam gaan hebben) en getelementsbyname('div_bb_spoiler') zal een array gaan returnen waarbij ik dan elk elementje moet gaan overlopen om te veranderen.

Is dat de enigste oplossing, of zijn er nog gemakkelijkere oplossingen waar ik geen weet van heb?

Alvast bedankt :)

Lashknife

Legacy Member
Code:
var spoilerdivs = document.getElementsByTagName("div");
for (var i = 0; i < spoilerdivs.length; i++) {
  if (spoilerdivs[i].className == "div_bb_spoiler") {
    spoilerdivs[i].style.color = "red";
  }
}
op deze manier... voor zover ik weet, denk niet dat er in JS een magic way is om te zeggen: getElementsByClassName, alhoewel het een zeer gewenste features zou zijn :)

als je meerdere classnames hebt (class="class1 class2 div_bb_spoiler"), doe dan strpos > 1 condition...
maar euh, niet werken met meerdere "name's" op 1 document, niet proper eh, gebruik een additional class.

Cyberkef

Legacy Member
Lashknife zei:
Code:
var spoilerdivs = document.getElementsByTagName("div");
for (var i = 0; i < spoilerdivs.length; i++) {
  if (spoilerdivs[i].className == "div_bb_spoiler") {
    spoilerdivs[i].style.color = "red";
  }
}
op deze manier... voor zover ik weet, denk niet dat er in JS een magic way is om te zeggen: getElementsByClassName, alhoewel het een zeer gewenste features zou zijn :)

als je meerdere classnames hebt (class="class1 class2 div_bb_spoiler"), doe dan strpos > 1 condition...
Aha! Precies wat ik zocht (denk ik), sebiets es proberen :)

Lashknife zei:
maar euh, niet werken met meerdere "name's" op 1 document, niet proper eh, gebruik een additional class.

Yeh daar vreesde ik ook al stiekem voor ^.^

BloodSeaker

Legacy Member
De voorgestelde functie is natuurlijk wel goed, maar niet perfect. Immers, als je div over 2 classes beschikt: "right bb_nogietske", dan zal het niet gaan werken.

Er zijn verschillende goede getElementsByClassName functies te vinden via Google, die met reguliere expressies werken en ook zeer performant zijn

Smoerf

Legacy Member
gewoon wat aanpassen, weet niet of het helemaal juist is, niet getest:
Code:
var spoilerdivs = document.getElementsByTagName("div");
for (var i = 0; i < spoilerdivs.length; i++) {
  if (/div_bb_spoiler/.test(spoilerdivs[i].className)) {
    spoilerdivs[i].style.color = "red";
  }
}

Zoiets dan als ik me niet vergis

Lashknife

Legacy Member
BloodSeaker zei:
De voorgestelde functie is natuurlijk wel goed, maar niet perfect. Immers, als je div over 2 classes beschikt: "right bb_nogietske", dan zal het niet gaan werken.
Mja, hierop zei ik met strpos ofzo te checken, maar idd zoals jezelf zegt en smurf neerschrijft, met een regexp matchen. 2 functies maken om de style heen en weer te maken, niet beginnen met classnames te updaten.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan