Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
fbisen>> \n vil aldrig blive vist som linjeskift i andet end koden. Og med koden document.createTextNode er det ikke muligt at indsætte HTML-koder - kun tekst.
Min kode skulle i øvrigt have været:
function insertText(o,s){ s=s.split("<br />"); for(var i=0;i<s.length;i++){ o.appendChild(document.createTextNode(s[i]); o.appendChild(document.createElement("br")); } }
var errortext="dengang jeg drog afsted <br /> ladida";
Nu er der nok en eller anden (mindst - høhø!), der har læst mig skrive noget om, at man aldrig har markup i en database - og/eller at man aldrig formaterer returdata som HTML i Ajax. I enkelte tilfælde vil jeg dog gerne indrømme, man kan have databaseindhold, hvor det kan være grænsende til en nødvendighed at have simpel formatering liggende i DB ... et online nyhedssite, forfattersite, o.lign.
Det betyder dog ikke, at jeg går ind for at udskrive tabeller, lister og div med f.eks. PHP, inden data returneres til klienten/browseren. Det beslaglægger alt for mange af serverens resourcer! Her taler jeg om f.eks. lidt b-, i- og br-tags ;o)
Til det formål har jeg lige hugget en ligge konverter sammen:
-------------------- snip -------------------- <script type="text/javascript"> function str2dom(sHtml) { var oXmlDoc = null; sHtml = "<z>"+sHtml.replace(/<br>/gi, "<br />").replace(/(^|>)(.*?)(<|$)/g, "$1<![CDATA[$2]]>$3")+"</z>"; if (window.DOMParser) { var oParser = new DOMParser(); oXmlDoc = oParser.parseFromString(sHtml, "text/xml"); } else { oXmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0"); oXmlDoc.async = false; oXmlDoc.loadXML(sHtml); } return cloneNodes(oXmlDoc.firstChild, document.createDocumentFragment());
function cloneNodes(oXML, oDOM) { var aCh = oXML.childNodes; for (var i=0,j=aCh.length; i<j; i++) { if (aCh[i].nodeType==1) { var o = document.createElement(aCh[i].nodeName); oDOM.appendChild(o); arguments.callee(aCh[i], o); } else if (aCh[i].nodeType==4) oDOM.appendChild(document.createTextNode(aCh[i].nodeValue)); } return oDOM; } }
function fooBar(sHtml) { var oTo = document.getElementById("foo"); oTo.appendChild( str2dom(sHtml) ); }
var sHtml = "Abla <b>bla</b> blabla. <i>Noget kursiv <br> skrift</i> bla. <b>En fed skrift <i>- og noget kursiv</i>, samt noget fed igen</b> ... og til slut noget normalt"; </script>
Denne version virker ligesom: ELEMENT.innerHTML += sHtml;
- altså en tilføjelse til elementets DOM-træ. Skal man bruge: ELEMENT.innerHTML = sHtml;
- skal funktionen fooBar se sådan ud:
function fooBar(sHtml) { var oTo = document.getElementById("foo"); while (oTo.firstChild) oTo.removeChild(oTo.firstChild); oTo.appendChild( str2dom(sHtml) ); }
Det er ikke nogen effektiv måde at gøre tingene på, men det kan som sagt bruges i visse specielle tilfælde =)
- vær opmærksom på, at der ikke må findes ulovlige, 'skæve' nestninger ... altså ikke noget à la: <b>noget fed <i>og noget kursiv</b></i>
Der er heller ikke taget højde for evt. (parser-) fejl eller opsnapning af disse - eller for browsere, der ikke understøtter de to implemneteringer af en XML-parser (har f.eks. ikke testet i Opera). Der er blot tale om et udkast til inspiration og videre udvikling ;o)
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.