tilbage til lektionen
Dette materiale er kun tilgængeligt på følgende sprog: عربي, English, Español, Français, Italiano, 日本語, 한국어, Русский, Українська, Oʻzbek, 简体中文. Hjælp os med at oversætte til Dansk.

Gør eksterne links orange

vigtighed: 3

Gør alle eksterne links orange ved at ændre deres style-egenskab.

Et link er eksternt hvis:

  • Dets href har :// i sig, og
  • Det ikke starter med http://internal.com.

Eksempel:

<a name="list">the list</a>
<ul>
  <li><a href="http://google.com">http://google.com</a></li>
  <li><a href="/tutorial">/tutorial.html</a></li>
  <li><a href="local/path">local/path</a></li>
  <li><a href="ftp://ftp.com/my.zip">ftp://ftp.com/my.zip</a></li>
  <li><a href="http://nodejs.org">http://nodejs.org</a></li>
  <li><a href="http://internal.com/test">http://internal.com/test</a></li>
</ul>

<script>
  // set style for et enkelt link
  let link = document.querySelector('a');
  link.style.color = 'orange';
</script>

Resultatet skal være som her:

Åbn en sandbox til opgaven.

Først skal vi finde alle eksterne referencer.

Der er to måder.

Den første er at finde alle links ved hjælp af document.querySelectorAll('a') og derefter filtrere ud, hvad vi har brug for:

let links = document.querySelectorAll('a');

for (let link of links) {
  let href = link.getAttribute('href');
  if (!href) continue; // ingen attribut

  if (!href.includes('://')) continue; // ingen protokol

  if (href.startsWith('http://internal.com')) continue; // intern

  link.style.color = 'orange';
}

Bemærk: vi bruger link.getAttribute('href'). ikke link.href fordi vi har brug for værdien fra HTML.

… en anden, simplere måde vil være at tilføje vores tjek til CSS-vælgeren:

// kig efter alle links der har :// i href
// men hvor href ikke starter med http://internal.com
let selector = 'a[href*="://"]:not([href^="http://internal.com"])';
let links = document.querySelectorAll(selector);

links.forEach(link => link.style.color = 'orange');

Åbn løsningen i en sandbox.