Hogyan lehet manipulálni a DOM-ot a Vanilla JavaScript-ben

Tehát megtanult változókat, kiválasztási struktúrákat és ciklusokat. Itt az ideje, hogy megismerje a DOM manipulációját, és elkezdjen csinálni néhány jó JavaScript projektet.

Ebben az oktatóanyagban megtanuljuk, hogyan kell kezelni a DOM-ot vanília JavaScript-sel. Minden további nélkül ugorjunk bele.

1. Először az első dolgokat

Mielőtt belevágnánk a kódolásba, tanuljuk meg, mi is az a Dom valójában:

A Document Object Model (DOM) egy programozási felület a HTML és XML dokumentumokhoz. Az oldalt ábrázolja, így a programok megváltoztathatják a dokumentum szerkezetét, stílusát és tartalmát. A DOM csomópontként és objektumként ábrázolja a dokumentumot. Így a programozási nyelvek csatlakozhatnak az oldalhoz. Forrás

Alapvetően, amikor egy böngésző betölt egy oldalt, létrehoz egy objektummodellt az oldalról, és kinyomtatja a képernyőn. Az objektum modell egy fa adatszerkezetben jelenik meg, minden csomópont tulajdonságokkal és módszerekkel rendelkező objektum, a legfelső csomópont pedig a dokumentum objektum.

Egy programozási nyelv használható az objektummodell elérésére és módosítására, és ezt a műveletet DOM-manipulációnak hívják. És ezt megtesszük JavaScript-szel, mert a JS fantasztikus.

2. A tényleges bemutató

Az oktatóanyaghoz két fájlra lesz szükségünk, az egyik index.html és a másik manipulation.js fájlra.

  DOM Manipulation 

DOM manipulation

Tutorial

Sibling

Medium Tutorial

Out of the div

Tehát itt van a HTML fájlunk, és amint láthatja, van egy div az osztás azonosítójával. Ezen belül van egy h1 elemünk, és ugyanabban a sorban, később meg fogja érteni, miért, két p elem és a div záró tag van. Végül van egy ap elem egy szöveg osztályával.

2.1. Hozzáférés az elemekhez

Vagy hozzáférhetünk egyetlen elemhez vagy több elemhez.

2.1.1. Egyetlen elem elérése

Egyetlen elem eléréséhez két módszert fogunk megvizsgálni: getElementByID és querySelector.

// the method below selects the element with the id ofheadlet id = document.getElementById('head');
// the code below selects the first p element inside the first divlet q = document.querySelector('div p');
/* Extra code */// this changes the color to redid.style.color = 'red';// give a font size of 30pxq.style.fontSize = '30px';

Most két elemhez jutottunk hozzá: a h1 elemhez, amelynek azonosítója a fej, és az első p elemhez a div belsejében.

A getElementById argumentumként egy azonosítót vesz fel, a querySelector pedig argumentumként egy CSS-választót vesz fel, és az első elemet adja vissza, amely megfelel a választónak. Amint láthatja, a módszer kimenetelét változókhoz rendeltem, majd a végén hozzáadtam egy kis stílust.

2.1.2. Több elem elérése

Több elem elérésekor egy csomópontlista kerül visszaadásra. Ez nem tömb, de úgy működik, mint egy. Tehát végigfuthat rajta, és felhasználhatja a length tulajdonságot a csomópontlista méretének megszerzéséhez. Ha konkrét elemet szeretne kapni, használhatja a tömb jelölést vagy az elem metódust. Látni fogja őket a kódban.

Több elem eléréséhez három módszert fogunk használni: getElementsByClassName, getElementsByTagName és querySelectorAll.

// gets every element with the class of textlet className = document.getElementsByClassName('text');
// prints the node listconsole.log(className);
/* prints the third element from the node list using array notation */console.log(className[2]);
/* prints the third element from the node list using the item function */console.log(className.item(2));
let tagName = document.getElementsByTagName('p');let selector = document.querySelectorAll('div p');

A kód magától értetődőnek tűnik, de mindenképp elmagyarázom, mert kedves haver vagyok. :)

Először a getElementsByClassName-t használjuk , amely argumentumként egy osztálynevet vesz fel. Csomópontlistát ad vissza minden olyan elem mellett, amelynek osztálya a szöveg . Ezután kinyomtatjuk a csomópontlistát a konzolon. A lista harmadik elemét is kinyomtatjuk a tömb jelölés és az elem metódus segítségével .

Másodszor, minden p elemet kiválasztunk a getElementsByTagName módszerrel, amely a címke nevét veszi argumentumnak, és az elem csomópontlistáját adja vissza.

Végül a querySelectorAll metódust használjuk , amely argumentumként CSS-választót vesz fel. Ebben az esetben div p-re van szükség, így visszaadja a p elemek csomópontlistáját a div belsejében.

Gyakorlati gyakorlatként nyomtassa ki a tagName és a selector csomópontok összes elemét, és derítse ki azok méretét.

2.2. Áthaladás a DOM-on

Eddig találtunk egy módot a konkrét elemek elérésére. Mi a helyzet akkor, ha egy elemhez szeretnénk hozzáférni egy olyan elem mellett, amelyhez már hozzáférünk, vagy egy korábban elért elem szülőcsomópontjához szeretnénk hozzáférni? Az ingatlan firstChild, lastChild, parentNode, nextSibling, és previousSibling lehet kapni ezt a munkát nekünk.

A firstChild egy csomópont első gyermek elemének megszerzésére szolgál. lastChild , ahogy sejtetted, megkapja a csomópont utolsó gyermek elemét. a parentNode azegy elem szülőcsomópontjának elérésére szolgál. nextSibling kap számunkra az elem mellett az elem már elérhető, és a previousSibling kap számunkra az elem előző az elem már elérhető.

// gets first child of the element with the id of divisionlet fChild = document.getElementById('division').firstChild;console.log(fChild);
// gets the last element from element with the id of divisionlet lChild = document.querySelector('#division').lastChild;
// gets the parent node of the element with the id divisionlet parent = document.querySElector('#division').parentNode;console.log(parent);
// selects the element with the id of middlelet middle = document.getElementById('middle');// prints ond the console the next sibling of middleconsole.log(middle.nextSibling);

A fenti kód először megkapja az elem firstChild elemét az osztási azonosítóval, majd kinyomtatja a konzolra. Ezután megkapja a lastChild elemet ugyanabból az elemből, az osztási azonosítóval. Ezután megkapja az osztás azonosítójával rendelkező elem parentNode-ját , és kinyomtatja a konzolra. Végül kiválasztja a közép azonosítójú elemet, és kinyomtatja a következőSibling csomópontot.

Most browsers treat white spaces between elements as text nodes, which makes these properties work differently in different browsers.

2.3. Get and Updating element content

2.3.1. Setting and getting text Content

We can get or set the text content of elements. To achieve this task we are going to use two properties: nodeValue and textContent.

nodeValue is used to set or get the text content of a text node. textContent is used to set or get the text of a containing element.

// get text with nodeValuelet nodeValue = document.getElementById('middle').firstChild.nodeValue;console.log(nodeValue);
// set text with nodeValuedocument.getElementById('middle').firstChild.nodeValue = "nodeValue text";
// get text with textContentlet textContent = document.querySelectorAll('.text')[1].textContent;console.log(textContent);
// set text with textContentdocument.querySelectorAll('.text')[1].textContent = 'new textContent set';

Did you notice the difference between nodeValue and textContent?

If you look carefully at the code above, you will see that for us to get or set the text with nodeValue, we first had to select the text node. First, we got the element with the middle id, then we got its firstChild which is the text node, then we got the nodeValue which returned the word Tutorial.

Now with textContent, there is no need to select the text node, we just got the element and then we got its textContent, either to set and get the text.

2.3.2. Adding and Removing HTML content

You can add and remove HTML content in the DOM. For that, we are going to look at three methods and one property.

Let’s start with the innerHTML property because it is the easiest way of adding and removing HTML content. innerHTML can either be used to get or set HTML content. But be careful when using innerHTML to set HTML content, because it removes the HTML content that is inside the element and adds the new one.

document.getElementById('division').innerHTML =`
      
  • Angular
  • Vue
  • React
`;

If you run the code, you will notice that everything else in the div with the id of division will disappear, and the list will be added.

We can use the methods: createElement(), createTextNode(), and appendChild() to solve this problem.

createElement is used to create a new HTML element. creatTextNode used to create a text node, and appendChild is used to append a new element into a parent element.

//first we create a new p element using the creatElementlet newElement = document.createElement('p');/* then we create a new text node and append the text node to the element created*/let text = document.createTextNode('Text Added!');newElement.appendChild(text);
/* then we append the new element with the text node into the div with the id division.*/document.getElementById('division').appendChild(newElement);

There is also a method called removeChild used to remove HTML elements.

// first we get the element we want to removelet toBeRemoved = document.getElementById('head');// then we get the parent node, using the parentNOde propertylet parent = toBeRemoved.parentNode;/* then we use the removeChild method, with the element to be removed as a parameter.*/parent.removeChild(toBeRemoved);

So first we get the element that we want to remove, and then we get its parent node. Then we called the method removeChild to remove the element.

2.4. Attribute node

Now we know how to handle elements, so let’s learn how to handle the attributes of these elements. There are some methods like GetAttribute, setAttribute, hasAttribute, removeAttribute, and some properties like className and id.

getAttribute as its name may suggest, it is used to get an attribute. Like the class name, the id name, the href of a link or any other HTML attribute.

setAttribute is used to set a new attribute to an element. It takes two arguments, first the attribute and second the name of the attribute.

hasAttribute used to check if an attribute exists, takes an attribute as an argument.

removeAttribute used to remove an attribute, it takes an attribute as an argument.

Id this property is used to set or get the id of an element.

ClassName is used to set or get the class of an element.

// selects the first divlet d = document.querySelector('div');// checks if it has an id attribute, returns true/falseconsole.log('checks id: '+d.hasAttribute('id'));// set a new class attributed.setAttribute('class','newClass');// returns the class nameconsole.log(d.className);

I know I am a good dude, but that code is just self-explanatory.

Conclusion

That is it! We have learned so many concepts, but there is more to learn about DOM manipulation. What we have covered here gives you a good foundation.

Go ahead and practice, and create something new to cement this new knowledge.

Good day, good coding.