Vra

Ek probeer om jQuery gebruik om kode blokke formaat, spesifiek na 'n <pre> tag binne die <code> tag voeg:

$(document).ready(function() {
   $("code").wrapInner("<pre></pre>");
});

Firefox geld die uitleg korrek, maar Internet Explorer sit die hele kode blok op een lyn. As ek voeg 'n waarskuwing

alert($("code").html());

Ek sien dat IE 'n paar ekstra teks in die pre tag het bygevoeg:

<PRE jQuery1218834632572="null">

As ek herlaai die bladsy, die aantal volgende jQuery veranderinge.

As ek wrap() in plaas van wrapInner(), om die <pre> draai buite die <code> tag, beide van Internet Explorer en Firefox hanteer dit korrek. Maar moet nie <pre> werk binnekant <code> sowel?

Ek sou verkies om wrapInner() gebruik, want ek kan dan voeg 'n CSS klas aan die <pre> tag om al opmaak hanteer, maar as ek gebruik wrap(), ek het na bladsy opmaak CSS sit in die <pre> tag en teks / font opmaak in die <code> tag, of Firefox en Internet Explorer beide verstik. Nie 'n groot deal, maar ek wil dit so eenvoudig as moontlik te hou.

Het iemand anders dit teëgekom? Mis ek iets?

Was dit nuttig?

Oplossing

Dit is die verskil tussen blok en inline elemente. pre is 'n blok vlak element . Dit is nie reg om dit binne 'n code tag, wat kan sit bevat net inline inhoud .

As gevolg blaaier moet ondersteun ongeag godawful tag sop hulle kon vind op die werklike web, Firefox probeer om te doen wat jy bedoel. IE gebeur om dit anders te hanteer, wat is goed deur die spec; gedrag in so 'n geval is ongespesifiseerde, omdat dit nooit sou gebeur.

Ander wenke

Btw Ek weet nie of dit is wat verband hou maar pre tags binne kode tags sal nie bekragtig in streng af.

Is jy met behulp van die nuutste jQuery? Wat gebeur as jy probeer

$("code").wrapInner(document.createElement("pre"));

Is dit nie beter of jy dieselfde resultaat te kry?

As markpasc gestel, 'n pre element binne KODE element word nie toegelaat in HTML. Die beste oplossing is om jou HTML-kode te verander om te gebruik

  (wat beteken 'n vooraf opgemaakte blok wat kode bevat) in jou HTML direk vir kode blokke. 

Jy kan html gebruik () om dit toe te draai:

$('code').each(function(i,e)
{
    var self = $(e);
    self.html('<pre>' + self.html() + '</pre>');
});

Soos hierbo genoem, jy beter af die verandering van jou html wees. Maar hierdie oplossing moet werk.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top