Hoi,

Ik probeer wat in javascript te maken (ik ben een beginner in javascript), maar ik loop tegen een probleempje aan.

Ik heb een <select> met meerdere <optgroup>'s. Nu wil ik bij een trigger, een of meerdere optgroups verbergen.

Ik dacht dat dat eenvoudig zou gaan met:
document.getElementsByTagName('optgroup').style.display.none

Maar ik krijg een foutmelding en er gebeurd ook niets.

Ik vermoed dat er helemaal geen manupuleerbare style-elementen bij optgroup horen.

Is er een andere eenvoudige wijze om dit voor elkaar te krijgen?
ja? en? als je er op wil wijzen dat ik "getElementsByTagName" had moeten gebruiken ... dan deed ik dat ook, alleen had ik het in mijn tekst verkeerd gezet, nu aangepast.
Ofwel die bestaat dus niet. getElementsByTagName() bestaat wel. Let hierbij op de S aan het einde van Elements. Dit geeft al aan dat er meerdere elementen gevonden kunnen worden en je dus een array terug mag verwachten. Je geeft aan dat je één of meerder optgroups wilt verbergen en dat gaat dus (bijna) niet met getElementsByTagName() omdat deze altijd ALLE groupopts zal geven.

Mogelijke oplossing zou kunnen liggen in id attribuut of beter nog in een data attribuut.


<optgroup data-id="1">Een groep</optgroup>


Nu zou je met getElementsByTagName() alle optgroups kunnen doorlopen en dan degene die het juiste data-id attribuut heeft kunnen verbergen. Aangezien dit een aantal stappen vereist lijkt het me handig om het geheel in een functie te zetten.

function hideOptGroupWithId(id) {
	var groups = document.getElementsByTagName("optgroup");
	for(var i = 0 ; i < groups.length ; i++) {
	
		if(groups[i].getAttribute("data-id") == id) {
			groups[i].style.display = "none";
			return; // nothing to do anymore so exit this function
		}
	}
}

hideOptGroupWithId(1);


Beste Frank,

Heb je dit getest? Het gaat mij niet om hoe ik bepaalde optgroups kan verbergen, maar het probleem is dat ".style" een foutmelding geeft.

Maar als je het getest hebt dan ga ik het nogmaals proberen. Graag even jouw bevestiging.

[size=xsmall]Toevoeging op 12/01/2020 00:25:32:[/size]

TypeError: document.getElementsByTagName(...).style is undefined
getest en werkt.

en je moet schrijven myElement.style.display = "none";

[size=xsmall]Toevoeging op 12/01/2020 01:04:50:[/size]

Nogmaals document.getElementsByTagName(...) levert je een array op. En een array heeft geen 'style' element.
Frank Nietbelangrijk op 12/01/2020 00:10:23

Mogelijke oplossing zou kunnen liggen in id attribuut of beter nog in een data attribuut.


Zonder dit topic te willen stelen: waarom is data-id beter dan id?

Jan
@Jan

1. een id attribuut moet volgens de html specificaties altijd beginnen met een karakter letter waardoor het direct al minder geschikt is om een "database ID" of anders gezegd een numeriek id in op te slaan.

2. id attributen moeten in de gehele DOM uniek zijn. Dit is absoluut niet het geval bij data attributen.
Bedankt
@Frank: Dank je wel voor je berichten. Ik snap nu mijn denkfout.



Reageren