jQuery: outerHTML

by Jesper august 04, 2009 11:04

Jeg har gennem mange år udviklet til IE only applikationer, og har brugt DOM-element egenskaben: outerHTML til mange ting, men i jQuery, findes der ikke en tilsvarende funktion. Man har innerHTML via html() på de enkelte elementer i en jQuery udvælgelse, og man kan jo ikke altid bruge: $(“#id”).parent().html(). Det virker jo ikke, hvis der er andre elementer på samme niveau.

Der er derfor mange der har lavet en lille plugin til formålet. Jeg synes dog ikke at der er nogen af dem der er rigtigt gode, da de fleste omkranser elemetets innerHTML med en p-tag, eller forsøger at lave noget smart med parent(). Jeg har derfor lavet en lille plugin:

// outerHtml plugin
(function($) {
    $.fn.outerHtml = function() {
        if ($.browser.msie) {
            return this[0].outerHTML;
        }
        else {
            var attrStr = "";
            $(this[0].attributes).each(function(i, itm) {
                attrStr += " {0}='{1}'".format(itm.name, itm.nodeValue);
            });
            return "<{0}{2}>{1}</{0}>".format(this[0].tagName, this[0].innerHTML, attrStr);
        }
    };
})(jQuery);

Bemærk at jeg bruger “{0}” format syntaks, som jeg har fra Core biblioteket.

Som du kan se, så checker jeg lige om der er tale om en IE browser via $.browser.msie propertyen. For hvis det er tilfældet, kan man jo lige så godt bruge DOM’en. Hvis ikke, skal vi lige manipulerer lidt. Jeg starter med at loope attributterne igenem for at få samlet dem og deres værdi på en streng af formen: “attr=’value’”. Der efter indsætter jeg dem i en streng der henholdsvis består af elementnavnet og innerHTML.

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