I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
function changeDiv() { var elm = document.getElementById('mitUnikkeId'); elm.innerHTML = '<div><input type="text" /><br /><span> </span></div>'; }
Én metode kunne være at oprette elementerne og så skifte input-elementet ud på følgende måde:
var o = document.getElementById("tekstFelt"); var oo = o.cloneNode(true); var oDv = document.createElement("div"); var oBr = document.createElement("br"); var oSp = document.createElement("span"); oSp.appendChild(document,createTextNode(" ")); oo.attributes.removeNamedItem("id"); oDv.appendChild(oo); oDv.appendChild(oBr); oDv.appendChild(oSp); o.parentNode.replaceChild(oDv, o);
phliplip >> Din løsning (08/02-2007 12:18:10) overskriver elementerne, hvorfor alt, der måtte være knyttet til elementerne (f.eks. event-handlers, sat med script/DOM), går tabt. Når du overskriver et element - ved at overskrive dets parent's innerHTML - er der ikke længere tale om det samme element ... blot et, der på overfladen er magen til ;o)
- og så har innerHTML aldrig været en valid property - og er helt ubrugelig under XHTML =)
Efter at have tænkt over problematikken, ville jeg nu nok selv vælge en anden fremgangsmåde. For det første er der ikke nogen grund til at bruge et span (inline-element) og et br-element. Du kan blot bruge et div i stedet for de to ;o)
Hvis ikke der er tale om en masse felter i formen, kunne det måske endda være smartere at lægge ud med en HTML, der ser sådan ud:
ole: Nu vi er ved det, ville man opnå noget performance mæssigt ved undgå at bruge innerHTML og bruge appendChild etc etc i stedet? Især hvis vi snakker om at det skal køres en hel del gange!
Jeg sidder som frontend udvikler i et "større" web-konsulent hus.. For at formindske mit arbejde mindst muligt har jeg brug for en "outtathebox" løsning.
Så jeg ikke skal bede udviklerne om at skrive ex: <div> <input id="tekstfelt" type="text"> <div style="display:none"> </div> </div>
men var <input id="tekstfelt" type="text" />
Vi arbejder efterhånden i en del af de større danske CMS systemer (synkron, dynamicweb, composite - og skal til at igang med siteCore) , og det er 10000% lettere hvis jeg bare har den her JS fil jeg kan smække på/ flytte rundt/ opdatere alene som er uafhængig af CMS'et.
Derfor ønsker jeg bare at knytte det på tekstfeltet, og jeg ønsker ikke at formode der ligger noget omkring.
du skriver : "Efter at have tænkt over problematikken" <- mener du hermed det første forslag ikke er optimalt ?
function inputWrapper(objHTMLElement) { var div = document.createElement('div'); var span = document.createElement('span'); span.appendChild(document.createTextNode(' ')); div.appendChild(span); objHTMLElement.parentNode.insertBefore(div, objHTMLElement); div.insertBefore(objHTMLElement, span); }
inputWrapper køres så med hvert input felt du ønsker, så du skal selv lige loope igennem alle, eller køre det på de specifikke felter hvor det skal bruges.
umle-keera >> med al respekt, så giver din kode ikke megen mening (omend den virker) =)
I de to sidste linjer indætter du først div'et foran 'objHTMLElement' - hvorefter du indsætter 'objHTMLElement' i div'et foran span'et ... men uden at fjerne 'objHTMLElement' fra DOM'en først. Det er vist ikke logisk ;o)
Desuden skal du passe på rækkefølgen af DOM-handlinger. Hvis der havde været sat en eller flere event-handlers på elementerne, ville IE leak'e memory med den viste rækkefølge. Den mest hensigtsmæssige rækkefølge er:
function inputWrapper(objHTMLElement) { var div = document.createElement('div'); objHTMLElement.parentNode.insertBefore(div, objHTMLElement); var span = document.createElement('span'); div.appendChild(span); span.appendChild(document.createTextNode(' ')); objHTMLElement.parentNode.removeChild(objHTMLElement); div.insertBefore(objHTMLElement, span); }
Synes godt om
Ny brugerNybegynder
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.