Jag heter Andreas Karman och är en del av We Up North. Jag arbetar med webbdesign, gränsnittsutveckling och WordPress. Läs mer om mig eller kontakta mig.

Automatiska ikoner på länkar med jQuery

När du länkar till dokument av olika slag, till exempel PDF-dokument eller Microsoft Office-dokument, är det ofta en mycket god idé att illustrera vad det är för typ av dokument som länkas genom att använda små ikoner för att inte ge dina besökare obehagliga överaskningar.

Att manuellt lägga till en bild eller en speciell CSS-klass för varje länk är inte bara tidskrävande, det kan också vara svårt att klara för en redaktör. Men det finns en smidig lösning baserad på jQuery som automatiserar detta.

Med jQuery implementerat och ytterligare några rader kod kan du automatiskt få till så att länkar med en speciell filändelse får en egen CSS-klass med en egen ikon.

Implementera jQuery

Först och främst måste du ladda ner jQuery och implementera det på din webbplats. Lägg filen i samma katalog som din webbplats och lägg in följande kod mellan HEAD-taggarna i ditt HTML-dokument.

<head>
<script src="jquery-1.3.2.js" type="text/javascript">
</script>
</head>

Fredrik Pahlin tipsar i kommentarerna om att man också kan ladda in jQuery från Google.

<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript">
</script>
</head>

jQuery-kod

För att åstadkomma den automatiska tilldelningen av CSS-klasser, använd jQuery-koden nedan. Vad koden gör är att den letar genom ditt HTML-dokument efter länkar till filer som har filändelsen som är nämnd i koden och lägger till en specifik CSS-klass för den länken.

I mitt första exempel är det ”.pdf” som är filändelsen som javascriptet letar efter och dessa länkar får CSS-klassen ”pdf”. Lägg även denna kod mellan webbplatsens HEAD-taggar.

<script type="text/javascript">
$(document).ready(function() {
	$("a[href$='.pdf']").addClass("pdf");
});
</script>

Du kan till exempel också lägga till samma funktionalitet för .doc, en filändelse som används av Microsoft Word.

<script type="text/javascript">
$(document).ready(function() {
	$("a[href$='.doc']").addClass("doc");
});
</script>

CSS-kod för ikonerna

Nästa steg är att lägga till CSS-klasser med ikonerna som bakgrundsbilder. Här är ett exempel på en CSS-klass för PDF-ikonerna. Bakgrundsbilden för PDF-ikonerna som jag använder är denna.

a.pdf {
padding: 0 0 0 25px;
background: url(images/icon-pdf.gif) no-repeat
}

Etiketter: , , , ,

  • Andreas: Jag känner ingen som använder IE så det var inte ett övervägande för mig. ;-)
  • Visst går det David, men att alla versioner av Internet Explorer inte gillar det är en nackdel.
  • Kan göras utan att blanda in JavaScript:

    a[type="application/pdf"], a[href$=".pdf"] {
    padding: 0 0 0 25px;
    background: url(images/icon-pdf.gif) no-repeat;
    }
  • HTTP 1.1 rekommenderar max 2 samtidiga anslutningar, men webbläsarna brukar åtminstone köra 4 anslutningar. Sen är det anslutningar/CNAME, inte domän, vilket innebär att man tjänar på att t ex sprida sitt material till olika subdomäner (t ex img.domän.se för bilder, css.domän.se för css osv).
  • Enklast om du kör Wordpress är att använda WP-disten av jQuery genom att lägga till följande i din functions.php:

    function _load_script_libraries() {
    wp_enqueue_script('jquery');
    }
    add_action('init','_load_script_libraries');
  • Samma fundering som Andreas Johansson, varför använda jQuery från Google när man kan köra internt och ha full kontroll?
  • Andreas, här är några fördelar:
    - Filen laddas ner från en server nära besökaren (CDN)
    - Om besökaren redan har besökt en webbplats som använder Googles server för jQuery är filen förmodligen cachad
    - Man delar upp HTTP-förfrågningarna på flera domäner (webbläsare hämtar normalt endast två filer pararellt från samma domän)
  • Varför använda jQuery från Google än att köra det internt?
  • Mycket användbart tips. Perfekt för vårt företags publiceringssystem. Kommer att pusha.
  • Bra tips Fredrik, lägger in det i inlägget.
  • Bra tips!

    Jag skulle använt jQuery från Googles servrar istället för min egen. De är ju snälla och har ett AJAX API - enklast är att bara använda denna URL (för samma version som ovan): http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
blog comments powered by Disqus