Legge til et element på en javascript-side. Fjern - Hvordan sette inn et element etter et annet element i JavaScript uten å bruke et bibliotek? Men sleng noen prototyper der for enkel bruk

Hvis du noen gang har skrevet JavaScript og måtte skrive noe sånt som:
var p = document.createElement("p");
p.appendChild(document.createTextNode("Ekte fiskefisk."));
var div = document.createElement("div");
div.setAttribute("id", "ny");
div.appendChild(p);

da kan dette være nyttig for deg.

Problem: Når du lager mer enn ett element nestet inne i hverandre, blir koden veldig kompleks.

Jeg tilbyr et enkelt verktøy for å løse problemet - create()-funksjonen (kildekoden nedenfor). La oss for eksempel lage et tekstavsnitt:
var el = create("p", ( ), "Farvel, kjærlighet!");

Eller en div med et avsnitt og en lenke inni:
var div = create("div", ( id: "ny", stil: "bakgrunn:#fff" ),
create("p", ( align: "center" ),
"introduksjon:",
create("a", ( href: "ua.fishki.net/picso/kotdavinchi.jpg" ),
"bilde"),
": slutt")
);

Eller her lager vi en tabell:
var holder = document.getElementById("holder2");
var tabellen;
var td;
holder.appendChild(
tabell =
create("tabell", (id: "ugly", cols:3),
create("tbody", (),
create("tr", (),
create("td", ( width: "10%" ),
"Hallo")
td =
create("td", ( stil: "bakgrunn: #fcc" ),
"der")
create("td", (Klasse: "spesiell2"), "overalt")
)
);

Vennligst merk: 1. IE krever et tbody-element, ellers nekter den å vise tabellen.
2. Klasseattributtet er i konflikt med noe, så du må skrive det som Klasse. Dette ser ikke ut til å ha noen effekt på resultatet.
3. table = og tr = i eksemplet lar deg lagre de opprettede nestede objektene for videre arbeid med dem.
4. Denne koden fungerer i IE, Mozilla og Opera Funksjonen i seg selv opprette (navn, attributter) (.
var el = document.createElement(navn);
if (type attributter == "objekt") (
for (var i i attributter) (
el.setAttribute(i, attributter[i]);

If (i.toLowerCase() == "klasse") (
el.klassenavn = attributter[i]; // for IE-kompatibilitet

) else if (i.toLowerCase() == "stil") (
el.style.cssText = attributter[i]; // for IE-kompatibilitet
}
}
}
for (var i = 2;i< arguments.length; i++) {
var val = argumenter[i];
if (typeval == "streng") ( val = document.createTextNode(val) );
el.appendChild(val);
}
returnere el;
}


Vi bør takke Ivan Kurmanov for ideen,
Originalartikkel med fungerende eksempler:

I dette innlegget vil jeg fortelle deg hvordan du legger til eller fjerner et element fra et objekt i JavaScript. Det er veldig enkelt, men mange nybegynnere, som meg før, blir ofte forvirret over det.

La oss lage et objekt for eksempel var obj = (navn: "alex", etternavn: "petrov", nettsted: "side", );

Vi har et enkelt objekt som inneholder data som navn, etternavn og nettside. Dataene kan være absolutt hva som helst, men for formålet med dette innlegget vil det være akkurat det.

Legge til et nytt element obj.country = "ru"; // vil legge til en ny nøkkel "land" til objektet med verdien "ru" obj["city"] = "Moskva"; // vil også legge til en ny nøkkel, bare "by" med verdien "Moskva"

Koden ovenfor er tydelig, men bare for å klargjøre: du kan legge til nye verdier til et objekt i objektsyntaks ved å bruke "." og nøkkelen eller det vanlige array-formatet. Hvis du erklærer det som en matrise, er obj fortsatt et objekt, siden du tidligere har utpekt det på den måten takket være () .

Lag et objekt inne i et objekt obj.other_obj = (); // lag en ny verdi other_obj i obj og gjør den til et objekt

La oss nå legge til noen data der:

Obj.other_obj.first = "første nøkkel til det nye objektet"; obj.other_obj.second = "andre";

Vi har laget to nye verdier, første og andre, inne i other_obj.

Slette et element delete obj.name; // returnerer: sant

Du kan bruke delete , som kan fjerne elementer fra objekter. Du kan ikke slette hele objektet på denne måten, men hvis du trenger det, kan du gjøre dette:

Obj = (); // Gjør objektet tomt igjen

Det er alt, hvis du fortsatt har spørsmål om objekter i JavaScript, skriv en kommentar nedenfor, jeg skal prøve å hjelpe deg.

Hallo! Ved å bruke JavaScript kan du ikke bare finne elementer på en side (les om hvordan du gjør dette), men også lage elementer dynamisk og legge dem til DOM. Hvordan du gjør dette vil bli diskutert i denne leksjonen.

For å skape nytt element på en nettside - dokumentobjektet har følgende metoder:

  • createElement(elementName): oppretter et nytt element, enhver HTML-sidetag må sendes som en parameter, returnerer et HTML-element
  • createTextNode(text) : Oppretter en tekstnode og returnerer den samme.

Legge til et element

La oss se på et lite eksempel:

Var el = document.createElement("div"); var elText = document.createTextNode("Hei verden");

Som du kan se fra eksempelet, vil elem-variabelen lagre en lenke til det nye div-elementet. Men som du forstår, er det ikke nok å lage elementer, de må fortsatt legges til nettsiden. Tross alt, når vi lager elementer på denne måten, ser de ut til å være i et slags virtuelt rom eller i minnet, men for å vise dem på en nettside er det spesielle metoder.

Følgende metoder brukes for å legge til elementer på en nettside:

  • appendChild(newNode): legger til et nytt element på slutten av elementet som denne metoden ble kalt
  • insertBefore(newNode, referenceNode): legger til en ny node før noden spesifisert som den andre parameteren.

La oss se på et eksempel på å feste et element til en nettside ved å bruke appendChild-metoden:

Artikkeltittel

Første ledd

Andre ledd

var article = document.querySelector("div.article"); // lag et element var el = document.createElement("h3"); // lag tekst for det var elTxt = document.createTextNode("Hei verden"); // legg til tekst til elementet som et underordnet element el.appendChild(elTxt); // legg til et element i div-blokkartikkelen.appendChild(el);

Eksemplet opprettet et vanlig h3-headerelement og en tekstnode. Tekstnoden legges deretter til tittelelementet. Tittelen legges deretter til et av nettsideelementene slik at den kan sees på siden.

Men det er slett ikke nødvendig å ha en ekstra tekstnode for å lage tekst inne i et element for dette, det er egenskapen textContent, som lar deg tilordne tekst direkte til et element.

Var el = document.createElement("h3"); el.textContent = "Hei, jeg er tittelen";

I dette tilfellet vil teksten bli opprettet implisitt når teksten settes direkte.

Og la oss også se på hvordan du legger til dette elementet i begynnelsen av en samling av underordnede noder til en div:

Var artDiv = document.querySelector("div.article"); // lag et element var el = document.createElement("h2"); // lag tekst for det var eltxt = document.createTextNode("Hei verden"); // legg til tekst i elementet som et underordnet element el.appendChild(eltxt); // få det første elementet som vil bli innledet med tillegget var firstEl = artDiv.firstChild.nextSibling; // legg til et element i div-blokken før den første noden artDiv.insertBefore(el, firstEl);

Hvis du plutselig trenger å legge til en ny node til den andre, tredje eller et annet sted, må du finne noden før du må sette den inn ved å bruke følgende egenskaper firstChild/lastChild eller nextSibling/previousSibling.

Kopiere et element

Det er situasjoner når elementene er ganske komplekse i komposisjon, og det er lettere å kopiere dem. En egen cloneNode() metode brukes til dette.

Var artDiv = document.querySelector("div.article"); // klone articleDiv-elementet var newArtDiv = artDiv.cloneNode(true); // legg til på slutten av body-elementet document.body.appendChild(newArtDiv);

Du må sende en boolsk verdi som en parameter til cloneNode()-metoden: hvis du sender true, vil elementet bli kopiert sammen med alle underordnede noder; hvis du gir feil, vil den bli kopiert uten underordnede noder. I dette eksemplet kopierer vi elementet sammen med innholdet og legger det til på slutten av nettsiden.

Fjerne et element

For å fjerne et element, må du kalle removeChild()-metoden. Denne metoden vil fjerne en av barnenodene:

Var artDiv = document.querySelector("div.article"); // finn noden som vi skal slette - det første avsnittet var removNode = document.querySelectorAll("div.article p"); // fjern noden artDiv.removeChild(removNode);

Dette eksemplet vil fjerne det første avsnittet fra div-blokken

Bytte ut et element

For å erstatte ett element med et annet, bruk metoden replaceChild(newNode, oldNode). Denne metoden tar et nytt element som den første parameteren, som erstatter det gamle elementet som ble sendt som den andre parameteren.

Var artDiv = document.querySelector("div.article"); // finn noden som vi skal erstatte - det første avsnittet var old = document.querySelectorAll("div.article p"); // opprette et element var new = document.createElement("h3"); // lag tekst for det var elemtxt = document.createTextNode("Hei verden"); // legg til tekst til elementet som et underordnet element new.appendChild(elemtxt); // erstatte den gamle noden med en ny artDiv.replaceChild(ny, gammel);

I dette eksemplet erstatter vi det første avsnittet med h2-overskriften vi nettopp opprettet.

RESULTATER.

For å lage et element brukes følgende metoder:

document.createElement(tag) - oppretter et nytt element.

document.createTextNode(tekst) - oppretter en tekstnode

Metoder for å sette inn og fjerne noder

  • parent.appendChild(el) - legger til et element på slutten av et eksisterende element
  • parent.insertBefore(el, nextSibling) - setter inn et element før et eksisterende element
  • parent.removeChild(el) - fjerner et element
  • parent.replaceChild(newElem, el) - erstatter ett element med et annet
  • parent.cloneNode(bool) - kopierer et element, hvis parameteren bool=true kopieres elementet med alle underordnede elementer, og hvis false uten underordnede elementer
Oppgaver Funksjon for å sette inn elementer

Skriv en funksjon insertAfter(newEl,oldEl) som setter inn det ene elementet etter det andre i selve funksjonen, selve elementene sendes som parametere.

Hvis du trenger å lage HTML-element, og du ikke vet hvordan du skal implementere det, da har du kommet til rett sted. Denne artikkelen vil ikke bare se på et eksempel på å lage et element, men også skrive en universell funksjon som du kan lage et nytt element med, legge til forskjellige attributter til det og fylle det med tekst.

Men først, la oss starte med noe enkelt. Når vi lager et nytt element, vil vi bruke metodene til DOM-objektet, nemlig:

* document.createElement(param) - denne metoden brukes direkte til å lage et element. Som en parameter tar den navnet på elementet som opprettes. Returnerer en kobling til det opprettede elementet.

document.createElement('div'); // vil lage et div-element.

* document.appendChild(param) – denne metoden brukes til å legge til et element i HTML-koden. Tar en kobling til det opprettede elementet som en parameter;

var parent = document.getElementsByTagName("BODY"); //få en lenke til body-elementet

var elem = document.createElement(‘div’);// vil opprette et div-element

parent.appendChild(elem); // legger til et element, der parent er koblingen der elementet vårt vil bli lagt til, i dette tilfellet er det kroppens kropp;

* document.createTextNode() - metoden brukes til å plassere tekst inne i et element.

Et eksempel på å lage et element.

funksjon createElem() (

Var newP = document.createElement("p");

NewP.className = "elemClass";

NewP.id = "myPId";

NewP.style.width = "100px";

NewP.style.height = "300px";

NewP.style.background = "#c5c5c5";

NewP.style.color = "#000";

Var text = "tekst som skal settes inn";

Var textNode = document.createTextNode(tekst);

NewP.appendChild(tekstNode);

Parent.appendChild(nyP);

I createElem-funksjonen er den overordnede variabelen en referanse til elementet (body) som det nye elementet skal plasseres i. Deretter opprettes et nytt element P, attributtene id, klasse, stil legges til det, og verdiene til disse attributtene settes. Deretter opprettes en tekstnode og legges til vårt nye element. Etter alt dette blir selve elementet lagt til kroppskroppen. For å lage et stort antall nye elementer må du jobbe hardt, fordi... du må kanskje plassere dem i forskjellige steder nettsider, dvs. festes til ulike elementer.

Et eksempel på å lage et element ved hjelp av en universell funksjon.

Denne funksjonen vil hjelpe deg med å lage et nytt element, legge til ulike attributter til det, knytte en tekstnode til det, plassere det før eller etter det angitte elementet, eller erstatte elementet med et nyopprettet element. Bare navneargumentet kreves.

funksjon createElement(navn, attrs, stil, tekst, past_id, posisjon, endret) (

Var parent = document.getElementsByTagName("BODY");

Var e = document.createElement(navn);

Hvis (attrs) (

For (tast inn attrs) (

Hvis (nøkkel == "klasse") (

E.klassenavn = attrs;

) else if (nøkkel == "id") (

E.id = attrs;

) annet (

E.setAttribute(nøkkel, attrs);

Hvis (stil) (

For (tast med stil) (

E.stil = stil;

Hvis (tekst) (

E.appendChild(document.createTextNode(tekst));

Parent.appendChild(e);

If(past_id)(

Var old_elem = document.getElementById(past_id);

If(posisjon=="før")(

Parent.insertBefore(e,old_elem)

)else if(posisjon=="etter")(

Sett innEtter(forelder,e,gammel_elem);

If(endret!="" && endret==true)(

Parent.removeChild(gammel_elem);

Alternativer:

Navn – elementnavn;

Attrs – attributter til det opprettede elementet;

Stil – stiler av det opprettede elementet;

Tekst – innsatt tekst;

Past_id – id for elementet ved siden av elementet vårt vil bli plassert;

Posisjon - kan ta to verdier før, etter;

Endret – et flagg som har to verdier: true eller false. Hvis denne parameteren er satt til true, vil det gamle elementet bli erstattet med et nytt.

Som et eksempel, la oss lage et DIV-element med attributter, og erstatte det gamle elementet med det nyopprettede.

createElement("div",

("class": "myDivCSSClass", "id": "myDivId","align":"center"),

("width": "200px", "height": "250px", "background": "#3B9D00", "color": "#fff"),

"her er min tekst",

"test",

"før"

Hvordan arbeide