Understreg pointen

by Jesper september 01, 2009 09:01

Ja der er jo nok 100 andre måder at gøre det på – fremhæv noget tekst på en html-side. F.eks. et søgeresultat eller lignende. Det er nemt nok at lave replace på strengen, og indsætte noget ‘high-light’ Html, men, for der er jo altid et: men, hvis Html’en indeholder noget der matcher:

Jesper forsøger at understrege en pointe i <a title="Jesper" href="#test">sin</a> html

Det vil give et uheldigt output hvis man forsøger med simpel replace:

var string = body.replace(/jesper/, “<span>$1</span>”);

Det vil finde jesper i både tekst og Html, og resultatatet vil være en side der ikke fungerer efter hensigten.

Man skal altså bruge et lidt mere komplekst regulært udtryk. Udtrykket skal med andre ord matche følgende:

Finde ordet: jesper, hvis det ikke bliver fulgt af tegnet ‘>’.

Vi skal altså bruge RegExp lookaround funktionalitet. Mere specifikt en negativ lookahead. Den har den egenskab at den laver et match, men som ikke fanger matchen. Syntaksen for negativ lookahead i JavaScript er: (?!pattern) – finder tekst der ikke matcher pattern, og når matchen findes, søges der foran ‘ikke-matchen’.

Følgende udtryk fremkommer:

var re = /(jesper)(?!([^<]+)?>)/gi

Den vil finde ‘jesper’, hvis ikke den er fulgt af en sekvens af ‘ikke <’ og ‘>’.

Ja – det er kryptisk, og enormt svært at forklare…

Som så ofte før, pakker vi funktionaliteten ind i en jQuery-plugin:

(function($) {
    $.fn.highlight = function(phrase) {
        var re = new RegExp("(" + phrase + ")(?!([^<]+)?>)", "gi");
        return this.each(function(idx, itm) {
            var newHtml = $(itm).html().replace(re, "<span style="background-color: yellow">$1</span>");
            $(itm).html(newHtml);
        });
    };
})(jQuery);

Nu er det let som ingen ting at understrege en pointe:

$("#myDiv").highlight("min pointe");
Code on…
Kommentarerne er lukkede

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen | Modified by Mooglegiant

About

Mit navn er Jesper Jensen, og jeg arbejder til dagligt som web-udvikler hos DGI, hvor mit speciale er klientside applikationer. Før det var jeg nogle år i robotbranchen, hvor jeg arbejdede med 3D simulering og system koordinering. Jeg elsker webudvikling, og specielt JavaScript har min interesse. Jeg har blogget om mine oplevelser med udvikling siden 2004

Calendar

<<  juli 2010  >>
mationtofr
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

View posts in large calendar

RecentComments

Comment RSS