Avatar billede showsource Seniormester
03. oktober 2008 - 19:55 Der er 18 kommentarer og
1 løsning

Linieskift med DOM

Hej
Jeg har en streng, hentet fra en db, f.eks.

Her er linie et.

Her kommer linie to


Hvordan får jeg vist linieskift med DOM ?
Er der alternativ til createTextNode ?
Avatar billede softspot Forsker
03. oktober 2008 - 20:15 #1
Kan du ikke bare splitte strengen ved linieskift og så løbe alle linierne igennem og indsætte tekst-elementer efterfulgt af et br-element...?
Avatar billede showsource Seniormester
03. oktober 2008 - 20:25 #2
Jow da, men tænkte om der ikke var en anden måde ?
Avatar billede chrisbookwood Nybegynder
03. oktober 2008 - 23:31 #3
Det vil rigtigt nok blive en masse hulomhej, men sådan er det nu engang med DOM...
Avatar billede olebole Juniormester
04. oktober 2008 - 03:32 #4
<ole>

Njaahhh ... ikke nødvendigvis:

function brDom(sText) {
    var o = document.createDocumentFragment();
    sText = sText.replace(/\r\n/g, "\r");
    sText = sText.replace(/(.*?)([\r|\n]+)/g, function(a,b,c,d){
        if (b!="") o.appendChild(document.createTextNode(b));
        for (var i=0,j=c.length; i<j; i++) o.appendChild(document.createElement("br"));
        return "";
    });
    if (sText!="") o.appendChild(document.createTextNode(sText));
    return o;
}

Hvis du så vil fylde en streng 'sStr' ind i divet 'fooBar', kan du skrive:

var sStr = "\r\nOle\r\nBole\r\n\r\nBumm!\r\nIh\r\n\r\n- hvor\r\n\r\n\r\ner\r\n\r\ndu\r\ndum";
var o = document.getElementById("fooBar");
var oo = brDom(sStr);
document.getElementById("bar").appendChild(oo);

/mvh
</bole>
Avatar billede showsource Seniormester
04. oktober 2008 - 06:38 #5
Ja, det er lidt kringlet at bruge DOM.
Men ole, dit ex. virker efter hensigten.

Dog skal man lige i dit ex. rette
document.getElementById("bar").appendChild(oo);

til
document.getElementById("fooBar").appendChild(oo);

eller jo nok nærmere
o.appendChild(oo);

:O) Men smid et svar
Avatar billede chrisbookwood Nybegynder
04. oktober 2008 - 09:27 #6
Kalder du ikke den en kringlet løsning, Ole? Javist - det er en super smart løsning, men at være nød til at gøre det på den måde, eller en hvilken som helst anden måde, gør noget så simpelt som linjeskift, meget `sværere´ end det burde være:)
Avatar billede showsource Seniormester
04. oktober 2008 - 11:13 #7
Jahh, man skulle jo mene et linieskift var noget af det mest simple :O)

Anyway, er det p.t. så'n her:

function make_br(sText,page) {

    var o = page.createDocumentFragment();
    sText = sText.replace(/\r\n/g, "\r");
    sText = sText.replace(/(.*?)([\r|\n]+)/g, function(a,b,c,d){
        if (b!="") o.appendChild(page.createTextNode(b));
        for (var i=0,j=c.length; i<j; i++) o.appendChild(page.createElement("br"));
        return "";
    });
    if (sText!="") o.appendChild(page.createTextNode(sText));
    return o;

}


"page" er med da jeg bruger den i en iframe.
Avatar billede olebole Juniormester
04. oktober 2008 - 16:01 #8
chrisbookwood >> Jamen, det er da ultra-nemt!

Problemet er, at man på den ene side ønsker et hamrende simpelt miljø i stil med det, som HTML var i begyndelsen - og som var beregnet til at opstille videnskabelige måledata med på tekstform. Det kan også sagtens lade sig gøre, hvis ikke man skal andet, end det, HTML 1.0 og JavaScript 1.0 kunne.

HTML, XML, CSS og JavaScript er dog blevet ret komplekse teknologier - og kravene stiger for hver eneste dag. Man vil kunne det samme, som man kan med alle mulige andre programmerings teknologier. Derfor bliver tingene også ligeså komplekse, som de er i andre sprog/miljøer.

Hvis du programmatisk skal oprette kontroller på en form i Visual Basic eller lign. sprog, foregår det på nogenlunde samme måde. Hvis du _vil_ til Australien, er det ikke nok at lære at cykle. Du må lade andre foretage transporten for dig - eller du må lære at sejle eller flyve  ;o)
Avatar billede showsource Seniormester
04. oktober 2008 - 16:07 #9
? Hvad er der nu galt med vandcyklen ? :O)

Og husk at svare !
Og tak for hjælp!

( Det er iøvrigt til en chat med lidt inspiration fra din "olebole-chat" )
Avatar billede olebole Juniormester
04. oktober 2008 - 16:14 #10
showsource >> Det skal jeg sige dig: Hvis hashrygning virkelig helt automatisk skulle føre til heroinmisbrug, er jeg overbevist om, at vandcyklen må være den direkte vej til vandvognen ... fri mig fra den slags!  ;D
Avatar billede showsource Seniormester
04. oktober 2008 - 16:26 #11
Kommer vel an på om man løber tør for røg på turen?
Avatar billede olebole Juniormester
04. oktober 2008 - 16:59 #12
Hehe ... tak for points  ;o)
Avatar billede chrisbookwood Nybegynder
04. oktober 2008 - 19:33 #13
Som altid har du ret, Ole ... Det ændre dog ikke på, at et linieskift burde være 1' linie kode, ikke 10-11 stk:P
Avatar billede olebole Juniormester
04. oktober 2008 - 20:56 #14
Jamen, sådan er det jo heller ikke. Ét linjeskift, kræver én linje kode:
    ELEMENT.appendChild( document.createElement("br") );

- og bruger du wrapperen ovenfor, indsætter én linje kode 873 breaks i en streng, hvis det skulle være ønskeligt  =)

Jeg synes sådan set, det er langt mere besværligt at stege en hakkebøf. Heldigvis bor der nede på hjørnet en hvidkitlet mand, som er ekspert i at slå køer ihjel og skære dem ud i passende stykker. Ellers var jeg da forlængst død af sult, for jeg kan jo heller ikke finde ud af at holde mig selv med grøntsager - det klarer den flinke tyrk og hans familie på det andet hjørne.

På samme måde må andre ud og finde smarte wrappers til at lave det 'mest besværlige' kodearbejde - men så er det også let at få noget fra hånden  ;o)
Avatar billede olebole Juniormester
04. oktober 2008 - 21:00 #15
Webkodning er et fag på lige fod med en slagters, gartners eller gynækologs. Om det så er ligeså suspekt at være amatør webkoder, som det er at være amatør gynækolog, skal jeg lade være usagt!  ;D
Avatar billede chrisbookwood Nybegynder
04. oktober 2008 - 21:14 #16
Jeg kan godt se din pointe, ja;)
Avatar billede olebole Juniormester
04. oktober 2008 - 21:41 #17
I min editor har jeg lavet en snippet 'Ctrl+Alt+H' (for 'Helpers'), som banker en flok wrappers ind i dokumentet. Til allersidst sletter jeg dem, jeg ikke bruger, mens jeg alligevel 'vasker koden ren'. Her er en håndfuld, som sparer en hel del på de fedtede, gigtsvage, små pizzatænger:

// Get element (by id. D is optional, and may i.e. refer to a XML-document)
function gE(id,D){return (D?D:document).getElementById(id)};
// Get array (by tagName)
function gAt(o,tN){return o.getElementsByTagName(tN)};
// Has className (check for 'classB' in class="classA classB classC" is also supported)
function hCn(o,cN){var oRX=new RegExp("\\b"+cN+"\\b");return oRX.test(o.className)};
/*
    Get array (by className)
    cN (String) - className
    tN (String) - element types to check (Optional. If not specified, check all)
    oP (Object) - element to search in (Optional. If not specified, search in document)
*/
function gAc(cN,tN,oP){var a=[],aa=(oP?oP:document).getElementsByTagName(tN?tN:"*"),i=aa.length-1;do{if(hCn(aa[i],cN))a.push(aa[i])}while(i--);return a};
// Get innerText from a DOM-structure
function gIt(o){var a=[],an=o.childNodes,i=an.length-1;do{a[i]=(an[i].nodeType==3?an[i].nodeValue:an[i].nodeType==1?arguments.callee(an[i]):"")}while(i--);return a.join("")};
// Create element (D is optional, and may i.e. refer to a XML-document)
function cE(tN,D){return (D?D:document).createElement(tN)};
// Create text node (D is optional, and may i.e. refer to a XML-document)
function cTn(tN,D){return (D?D:document).createTextNode(tN)};
Avatar billede olebole Juniormester
04. oktober 2008 - 21:44 #18
- og der burde nok under 'hCn' (hasClassName) stå:
    tN (String) - element types (by tagName) to check (Optional. If not specified, check all)
Avatar billede olebole Juniormester
04. oktober 2008 - 21:45 #19
Baahhh ... det var jo under 'gAc' (get array by className)  ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester