Vefforritun 1 kennd haustið 2025
Í æskilegri röð:
<script src="scripts.js"></script><script>...</script>onclick)HTML, CSS og JavaScript er ekki sótt á augabragði, í einfaldaðri mynd gerist:
<script> er sótt, þáttað og keyrt (annað bíður!)<link rel="stylesheet"> er sótt og þáttað<script> sækir hann skjalið og keyrir en bíður á meðan með að teikna síðu<script async> er skjalið sótt async og keyrt um leið og hægt ertype="module":
    <script> rétt áður en við lokum <body>b.js þarf eitthvað úr a.js setjum við a.js fyrst<!doctype html>
<html>
  <head>
    <title>My home page</title>
  </head>
  <body>
    <h1>My home page</h1>
    <p>Hello, I am Marijn and this is my home page.</p>
    <p>I also wrote a book! Read it
      <a href="http://eloquentjavascript.net">here</a>.
    </p>
  </body>
</html>
windowwindowdocument hlutinn á windownodeType segir til um gerð nóðu, t.d. 1 er ELEMENT_NODE, 3 er TEXT_NODENode, t.d. Node.ELEMENT_NODEdocument.documentElement okkur aðgang að rót DOM trés, <html>document.body gefur okkur aðgang að hluttré sem byrjar undir <body>Dæmi um óþægindi:
NodeList sem er næstum því array, en samt ekkiHver nóða hefur vísanir í foreldri, börn og systkini:
parentNode – foreldri nóðuchildNodes – fylki af börnum nóðulastChild – seinasta barn nóðupreviousSibling –  fyrra systkini nóðuchildNodes og athugum hvort börn séu ELEMENT_NODE, höldum þá áframchildNodes er NodeListNodeList er ekki alvöru fylki, getum breytt í array með Array.from()function walk(node) {
  const {
    childNodes, nodeType, nodeValue,
  } = node;
  if (nodeType === Node.ELEMENT_NODE) {
    for (const child of Array.from(childNodes)) {
      walk(child);
    }
  } else if (nodeType === Node.TEXT_NODE) {
    console.log(`Textanóða: ${nodeValue}`);
  }
}
walk(document.body);
document og element hafa föll sem leyfa okkur að leita eftir ýmsum leiðumid (því id er einkvæmt á síðu!)document.getElementById('main') til að leita á allri síðuelement.getElementById('main') til að finna undir ákveðnu elementNodeListdocument.getElementsByTagName('a') til að leita á allri síðuelement.getElementsByTagName('a') til að finna undir ákveðnu elementclass og skilar lifandi safnidocument.getElementsByClassName('list') til að leita á allri síðuelement.getElementsByClassName('list') til að finna undir ákveðnu elementquerySelector leitar eftir CSS selector að fyrsta elementi sem passar (dýpt fyrst)document.querySelector('.important') til að leita á allri síðuelement.querySelector('.important') til að finna undir ákveðnu elementquerySelectorAll leitar eftir CSS selector að öllum elementum sem passarNodeList, ekki lifandidocument.querySelectorAll('div') til að leita á allri síðuelement.querySelectorAll('div') til að finna undir ákveðnu elementNotum querySelector og querySelectorAll lang mest þegar við erum að leita að elementum.
Samlegðaráhrif á milli CSS og JavaScript gegnum selectora!
removeChild – fjarlægir barnappendChild – bætir við barni á nóðu, aftastinsertBefore – bætir við barni á nóðu, á undan tilgreindu barni<p>One</p>
<p>Two</p>
<p>Three</p>
const paragraphs =
  document.body.getElementsByTagName('p');
document.body.insertBefore(
  paragraphs[2],
  paragraphs[0],
);
document.createElement(element) – býr til nýtt element sem við getum átt viðdocument.createTextNode(text) – býr til texta nóðuappendChildconst p = document.createElement('p');
p.setAttribute('class', 'hello');
const txt = document.createTextNode('Hæ!');
p.appendChild(txt); // bætum texta við p
// bætum p við, aftast í body
document.documentElement
  .lastChild.appendChild(p);
setAttribute(attribute, value) – setur attribute á elementigetAttribute(attribute) – sækir attribute á element
    value á inputclassName fyrir class (class er frátekið orð!)const input =
  document.createElement('input');
input.setAttribute('type', 'text');
input.setAttribute('id', 'searchField');
input.setAttribute('required', true);
input.setAttribute('value', 'foo');
// gildi breytt í "foobar" í input
input.getAttribute('value'); // "foo"
input.value; // "foobar"
function el(name, ...children) {
  const e = document.createElement(name);
  for (const child of children) {
    if (typeof child === 'string') {
      e.appendChild(
        document.createTextNode(child),
      );
    } else {
      e.appendChild(child);
    }
  }
  return e;
}
document.body.append(
  el('div',
    el('p', 'Halló heimur!'),
    el('ul',
      el('li', 'einn'),
      el('li', 'tveir'),
      el('li', 'þrír'),
    ),
  ),
);
<div>
  <p>Halló heimur!</p>
  <ul>
    <li>einn</li>
    <li>tveir</li>
    <li>þrír</li>
  </ul>
</div>
data-”, t.d.  data-fooel.dataset.fooclass á element er hentugast að nota classListclass án þess að fara í strengjaleikfimi
    class sem streng gegnum classNameelement.classList.add bætir við class ef hann er ekki til staðarelement.classList.remove fjarlægir class ef hann er til staðarelement.classList.toggle bætir við ef ekki, annars fjarlægirconst div =
  document.createElement('div');
div.classList.add('text');
div.classList.add('important');
// class="text important"
div.classList.remove('text');
div.classList.toggle('important');
// class=""
div.classList.toggle('important');
// class="important"
style hlut á nóðu, node.stylestyle attributeclass eru á elementclassconst div = document.querySelector('div');
// hlutur með öllum stílum á div
div.style;
// setjum margin á div
div.style.margin = '10px 20px 30px 10px';
textContent er eigindi á node sem leyfir okkur að lesa allan texta nóðu eða setja texta nóðuinnerText er svipað, nema það skilar aðeins sýnilegum (lesanlegum) textainnerHTML skilar HTML nóðu eða setur efni nóðu sem HTML
    offsetWidth og offsetHeight gefa okkur stærð á efni innan elements í pixlumclientWidth og clientHeight gefa okkur stærð á efni innan elements, án border í pixlumgetBoundingClientRect() skilar hlut með upplýsingum um hvar element er teiknað hlutfallslega á síðupageXOffset og pageYOffset á window gefa okkur upplýsingar um hversu mikið er búið að skruna (scrolla) síðuopacity og transform
    requestAnimationFrame keyrir fall á þeim tíma þegar vafri er að fara að teikna útlitDOMHighResTimestamp, sem segir til um hvað klukkan er, nákvæmt niður á 1ms