Skal bruges i forbindelse med afsnits opbygget CMS. Et hint til søgning ville også være rart - eller endnu bedre til links på nettet med lignende funktioner.
Det kan der ikke siges ret meget begavet om, før vi ved noget mere. Hvad omkranser f.eks. de to div? Kan der være flere end to div? Info ... info ... info :)
Ja, det kan jeg godt forestille mig, men man er nødt til at tage fat i det omkransende element for at lykkes med noget. Derfor er det vigtigt, hvordan de ligger i forhold til resten af koden.
Ligger de i et andet div ... "de kunne evt. ligge inden i en anden div" er ikke en brugbar information.
Ligger der andre elementer, der skal blive liggende, i det omkransende element?
... er det noget, du kan bruge? Du må selv lave felterne om til type="hidden". Nu er de af typen "text", så du kan se, hvad der sker. Du har også mulighed for at have flere felter i hvert div. Scriptet rører kun ved det felt i hvert div, der har fået sat klassen 'showInxInp'. /mvh
Når vi nu bruger "this" som parameter til functionen, får vi et problem da vi ligger knapperne "UP" and "Down" i en span. Så kommer "this" jo til at repræsentere span'en istedet for den div vi ønsker at flytte...
Hvordan kan man smartest putte den rigtige ID eller reference med functions kaldet?
Ja, det kunne man godt tro, men det har jeg taget højde for. Så snart, vi rammer funktionen, bliver referencen sat til knappens 'parentNode' = div'et. Lad os lige tage funktionen fra toppen:
function myMove(elm, dir) { // Deklarer funktionens private variabler (så er det gjort ét sted) var elmHTML, elmID, prevElm, nextElm, newElm;
// Sæt elm = knappens omkransende element (div'et) elm = elm.parentNode;
// Læs div'ets indhold og gem det i en variabel elmHTML = elm.innerHTML
// Læs div'ets id og gem den i en variabel elmID = elm.id;
// Opret et nyt element og giv det indhold og id // Vi klistrer ikke elementet ind endnu newElm = d.createElement("DIV"); newElm.id = elmID; newElm.innerHTML = elmHTML;
// Hvis up-knappen blev klikket og div'et ikke er det første i rækken if (dir=="up" && elm.previousSibling) { // Find elementet før div'et og gem en reference til det i en variabel prevElm = elm.previousSibling; // Slet det oprindelige div gE("cont").removeChild(elm); // Indsæt det nye element på det rigtige sted prevElm.insertAdjacentElement("BeforeBegin", newElm); } else if (dir=="down" && elm.nextSibling) { nextElm = elm.nextSibling; gE("cont").removeChild(elm); nextElm.insertAdjacentElement("AfterEnd", newElm); } }
Sidste if-sætning skulle du så nok kunne hitte ud af ;o) Hjalp det på forståelsen? /mvh
Hvis jeg forstår dig ret, siger du at der er taget højde for at vi putter knapperne i en span inden i diven? Sttrukturen ser sådan her ud... <div><span><input type="text"> text her </span><span> knapper </span></div>
Når vi bruger din function og HTML kode som det er giver det ingen problemer, men så snart vi sætter spans omkring fejler det...
Jeg skal vel så der hvor du deklarerer "elm = elm.parentNode;" bruge dens parent af parent eller hvad? og hvordan d..... gør man det? Som du nok har fundet ud af er JS ikke lige vores stærke side.
Hej igen. Håber du stadig kigger på denne post OleBole. Vi har nemlig fundet et lille skummelt problem, for det viser sig nemlig at funktionen fint nok gemmer innerhtml'en fra div'en der flyttes, men da der nu ligger 2 spans i denne div, tæller de åbenbart ikke med som "innerhtml" da de er et child til div'en...
Er der en måde hvorpå vi kan få scriptet til at tage koden med fra de 2 spans?
Lover at jeg nok snart skal lade dig få lidt fred... hehe
Mange tak for hjælpen i aften/nat, vi stopper nu og har indtil videre fået det til at køre som det skal. Problemet var noget så simpelt som den padding der var på div'en der indeholdt de 2 spans. Af en eller anden grund "stak" spansne udenfor div'en og lavede derfor en ikke tilsigtet ombrydning.
Vi har flere vilde planer med dit lille script, men de må vente til i morgen, nu skal der soves lidt.
Har fundet et nyt problem i scriptet, eller det er vel nærmere en udbygning af det. Når man creater den nye DIV, har den tilsyneladende ikke de samme egenskaber som den DIV den genskaber. Jeg mener; når vi fjerner en DIV og indsætter den et andet sted, har den nye DIV ikke den gamle divs "class" med. Så er spørgsmålet hvordan sætter jeg class på det nye element til f.eks. "newclass".
//Ny DIV skabes newElm = d.createElement("DIV"); //Den nye DIV tildeles ID fra den gamle newElm.id = elmID; // Her forsøger jeg så at sætte classen til newclass newElm.class = "newclass";
Det virker umiddelbart fint i FireFox. Du er en helt olebole ;-)
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.