Elementen toevoegen
Last updated
Last updated
Binnen jQuery kunnen we op verschillende manieren nieuwe inhoud aan de pagina toevoegen. We kunnen zowel volledig nieuwe inhoud genereren en aan de pagina toevoegen, als reeds bestaande inhoud verplaatsen of dupliceren (klonen).
Eerst gaan we na, hoe we bestaande of nieuwe inhoud binnen een element toevoegen. Twee methodes werden in voorgaande hoofdstukken reeds herhaaldelijk gebruikt.
★ Open dom/inside.html. ★ Bekijk de broncode en test de pagina in een browser.
Vooraan het script leest de methode html()
de inhoud van #p1 uit en plaatst deze in de variabele data. Een klik op #inside1 kopieert de volledige inhoud, inclusief HTML-tags, van data naar #p2.
De methode text()
daarentegen kopieert enkel de tekst, zonder HTML-opmaak, naar #p2.
Om nieuwe inhoud binnen een element toe te voegen, kunnen we vier methodes gebruiken: twee methodes om gegevens vooraan toe te voegen en twee methodes om de inhoud achteraan toe te voegen.
append()
en prepend()
worden altijd voorafgegaan door een selector. Binnen de methode komt de inhoud die we respectievelijk achteraan of vooraan de selector toevoegen.
Met appendTo()
en prependTo()
draaien we de logica om. Eerst komt de inhoud die we wensen toe te voegen en binnen de methode staat de selector.
appendTo()
en prependTo()
volgen op het eerste zicht een vreemde logica die we binnen jQuery niet gewend zijn. Het resultaat van append()
en appendTo()
is in dit voorbeeld net hetzelfde. Meestal kan u dus één van beide methodes kiezen, maar in uitzonderlijke gevallen geniet appendTo()
toch de voorkeur. Hierover dadelijk meer.
In deze voorbeelden gaan we de nieuwe inhoud niet binnen, maar net voor of net achter de geselecteerde selector plaatsen.
★ Open dom/outside.html. ★ Bekijk de broncode en test de pagina in een browser.
Ook hier beschikken we weer over vier methodes: twee methodes met de selector vooraan en twee methodes met de selector binnen de methode.
after()/insertAfter()
en before()/insertBefore()
plaatsen de nieuwe inhoud respectievelijk achter of voor de selectie.
Hier volgen enkele methodes waarbij we nieuwe inhoud (meestal extra tags) rond een selectie plaatsen.
★ Open dom/around.html. ★ Bekijk de broncode en test de pagina in een browser.
In onderstaand voorbeeld plaatst de methode wrap()
een div-tag rond #lijst1. Telkens u op de knop klikt, wordt een nieuwe div-tag toegevoegd. Met unwrap()
kan u de PARENT-tag terug verwijderen. Klik maar eens enkele keren op unwrap()
en u zal merken dat de volledige layout verdwijnt.
De tweede section-tag bevat verschillende p-tags waarvan twee p-tags met de class .groen. De methode wrapAll()
brengt eerst alle p-tags met class .groen samen en plaatst hier vervolgens in zijn geheel een div-tag rond. De methode wrap()
zal rond elke p-tag apart een div-tag plaatsen.
De HTML-code wijzigt van:
Naar:
Waar wrap()
een nieuwe tag rond de selectie plaatst, plaatst wrapInner()
een nieuwe tag binnen de selectie.
In bovenstaand voorbeeld wijzigt de code.
van: <p class="groen">Item 1...</p>
naar: <p class="groen"><span class="drop-shadow">Item 1...</span></p>
We komen nog even terug op het verschil tussen before()/insertBefore()
.
★ Open dom/before_insertBefore.html. ★ Bekijk de broncode en test de pagina in een browser.
Aan de eerste paragraaf van elke section-tag wordt een afbeelding toegevoegd. Voorlopig nog niets aan de hand. Beide methodes geven immers hetzelfde resultaat.
Stel dat we via de class .rood een kader rond de afbeelding plaatsen. In principe kunnen we de klasse natuurlijk rechtstreeks op de img-tag plaatsen en dan zien we ook geen verschil tussen beide methodes. Indien we de klasse echter vanuit jQuery toevoegen, dan is er wel degelijk een verschil.
★ Pas de code als volgt aan:
Binnen de tweede section-tag krijgt de afbeelding een rode kader, maar binnen de eerste section-tag komt het kader rond de p-tag te staan, binnen een ketting vanaf de selector. Aan de selector wordt een klasse toegevoegd en vervolgens wordt de nieuwe code toegevoegd.
De structuur van onze ketting is namelijk:
kader op p-tag: $(selector).addClass(...).before(nieuweCode);
kader op foto: $(nieuweCode).addClass(...).insertBefore(selector);
Ook addClass()
en before()
van plaats wisselen heeft totaal geen zin. Beide geven immers net hetzelfde resultaat.
kader op p-tag: $(selector).addClass(...).before(nieuweCode);
kader op p-tag: $(selector).before(nieuweCode).addClass(...);
Indien u toch met before()
werkt, zal u de code moeten opsplitsen over twee lijnen.
Onderstaande code geeft wel het gewenste resultaat:
Besluit:
Wilt u enkel nieuwe inhoud toevoegen, dan kan u zowel before()
als insertBefore()
gebruiken.
Indien u, VOOR het toevoegen, nog extra jQuery methodes toepast op de nieuwe inhoud, gebruik dan STEEDS insertBefore()
.
Dezelfde logica geldt natuurlijk ook voor append()/appendTo()
, prepend()/prependTo()
, after()/insertAfter()
, before()/insertBefore()
en replaceWith()/replaceAll()
.
De laatst genoemde methodes komen dadelijk aan bod.