Je bent zo te zien een purist als het gaat om cleane HTML. Lovenswaardig. Maar je wil wel layout problemen liever oplossen met javascript dan met een extra divje, terwijl dat weer helemaal tegen de pure scheiding van verantwoordelijkheden ingaat.
Ok, een extra divje hier en daar is ook schending van de pure HTML en als je daar te ver in door schiet krijg je een rommelig en slecht onderhoudbaar resultaat. Maar als je probleem iets is dat je kan oplossen met een extra container in HTML of met een stuk javascript, dan raad ik je toch echt aan om dat op te lossen met die HTML container.
Volgens mij was je ook al wel duidelijk dat de meeste mensen hier er zo over denken, maar ben je op zoek naar de argumentatie daarvoor.
Browsers worden steeds sneller en beter en zeker ook sneller in javascript. Toch wil je het jezelf en je browser zo makkelijk mogelijk maken. Als je probleem op te lossen is door een extra container, geef je de browser één extra DOM-node om te verwerken. Iets waar browsers bijzonder goed in zijn, het is immers de core-funtionaliteit. Als je datzelfde probleem met javascript oplost, zal dat zo goed als zeker meer dan twee of drie regels javascript zijn, waarschijnlijk eerder 5 of 10 of nog veel meer. En als je zegt het is één regel in jQuery of wat je favoriete library ook is, besef dan dat er achter die regel tientallen tot honderden regels in de library zitten. Dat is allemaal werk dat je browser moet verrichten. Javascript is best snel, maar HTML + CSS is in 99,9% v.d. gevallen sneller. (edit: en grote kans dat dat javascript alsnog extra DOM-nodes toevoegt, waardoor de browser dat werk alsnog ook moet verrichten)
Dan nog blijven er soms dingen over die je met javascript moet oplossen, maar elke keer als ik dat gedaan heb, heb ik er achteraf spijt van omdat het meer kans op bugs geeft en moeilijker onderhoudbaar is dan een HTML + CSS oplossing.
Als je uit mag gaan van moderne browsers (niks onder IE9) en dus allerlei CSS3 dingen kan gebruiken kan je echt bijna alles met CSS oplossen.
td:not(:last-child)
Dat doet volgens mij exact wat je wil.
https://jsfiddle.net/c2tnonyu/
Ok, een extra divje hier en daar is ook schending van de pure HTML en als je daar te ver in door schiet krijg je een rommelig en slecht onderhoudbaar resultaat. Maar als je probleem iets is dat je kan oplossen met een extra container in HTML of met een stuk javascript, dan raad ik je toch echt aan om dat op te lossen met die HTML container.
Volgens mij was je ook al wel duidelijk dat de meeste mensen hier er zo over denken, maar ben je op zoek naar de argumentatie daarvoor.
Browsers worden steeds sneller en beter en zeker ook sneller in javascript. Toch wil je het jezelf en je browser zo makkelijk mogelijk maken. Als je probleem op te lossen is door een extra container, geef je de browser één extra DOM-node om te verwerken. Iets waar browsers bijzonder goed in zijn, het is immers de core-funtionaliteit. Als je datzelfde probleem met javascript oplost, zal dat zo goed als zeker meer dan twee of drie regels javascript zijn, waarschijnlijk eerder 5 of 10 of nog veel meer. En als je zegt het is één regel in jQuery of wat je favoriete library ook is, besef dan dat er achter die regel tientallen tot honderden regels in de library zitten. Dat is allemaal werk dat je browser moet verrichten. Javascript is best snel, maar HTML + CSS is in 99,9% v.d. gevallen sneller. (edit: en grote kans dat dat javascript alsnog extra DOM-nodes toevoegt, waardoor de browser dat werk alsnog ook moet verrichten)
Dan nog blijven er soms dingen over die je met javascript moet oplossen, maar elke keer als ik dat gedaan heb, heb ik er achteraf spijt van omdat het meer kans op bugs geeft en moeilijker onderhoudbaar is dan een HTML + CSS oplossing.
Als je uit mag gaan van moderne browsers (niks onder IE9) en dus allerlei CSS3 dingen kan gebruiken kan je echt bijna alles met CSS oplossen.
Voor jouw voorbeeld, wat dacht je van:Maar dit breekt zodra er elementen bijkomen/verdwijnen/verwisslen, en dat is omdat de rule mijn manier van denken (select 'non-last' element) niet kan omvatten.
td:not(:last-child)
Dat doet volgens mij exact wat je wil.
https://jsfiddle.net/c2tnonyu/