Element verwijderen zonder zijn content

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 12-09 14:37
Beste tweakers,

code:
1
2
3
<form action="" method="post">
    <input type="text" name="naam" />
</form>


Hoe zorg ik ervoor dat ik met JavaScript de form tag compleet weghaal en dat alleen de input overblijft.
Met de functie remove van javascript haal ik de content ook weg uit de form.

Nu kan ik een loop maken en alle elementen in een variable stoppen en die later weer terugzetten maar dit leek mij niet de beste oplossing omdat er bijvoorbeeld al tekst in de input is gezet die dan niet word opgeslagen. Ook leek het mij niet de beste oplossing omdat de content behoorlijk groot is in mijn form en om dat nu allemaal in één variable te stoppen leek mij een beetje te.

Dus mijn vraag: hoe kan ik dit beter aanpakken?

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

???

Je bent bekend dat input elementen in een form moeten staan volgens de HTML specificaties? Waarom zou je uberhaupt het form element willen verwijderen. Je zou een div element aan de parent van het form kunnen toevoegen en vervolgens de children van het form kunnen toewijzen aan de nieuwe div.

Maar ik ben erg benieuwd waarom je dit zou willen..

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:53

crisp

Devver

Pixelated

Niemand_Anders schreef op vrijdag 23 april 2010 @ 12:18:
???

Je bent bekend dat input elementen in een form moeten staan volgens de HTML specificaties?
Da's niet waar...
Maar ik ben erg benieuwd waarom je dit zou willen..
Dat ben ik echter ook :)

Technisch kan het overigens wel: maak een documentFragment object, stop daar alle children van je element in en vervang dat element vervolgens door je fragment :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
In Jquery heb je daar unwrap voor.

Niet dat ik dat ooit gebruikt heb, maar het kan :+

Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 12-09 14:37
De reden dat ik dit wil is dat ik een 'ajax' file upload maak en ik meedere bestanden wil uploaden in dezelfde form. Maar omdat je al kan beginnen met uploaden voordat je de volgende bestand in een andere input heb geselecteerd moet er dus een tijdelijke form om de input komen:

code:
1
2
3
4
<form action="" method="post">
    <input type="file" name="naam" />
    <input type="file" name="naam2" />
</form>


Op moment dat je op de tweede input klikt moet het er zo uit komen te zien:
code:
1
2
3
4
5
<input type="file" name="naam" />
<form action="" method="post" target="frame">
    <input type="file" name="naam2" />
    <iframe name="frame"></iframe>
</form>


Dit omdat een form in een form niet mag.


Zou je een voorbeeldje kunnen geven wat je bedoeld met:
'Je zou een div element aan de parent van het form kunnen toevoegen en vervolgens de children van het form kunnen toewijzen aan de nieuwe div'

Overigens gebruik ik geen JQuery.

[ Voor 30% gewijzigd door ZeroXT op 23-04-2010 12:40 ]


Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 12-09 11:48
code:
1
2
3
4
5
6
var sourceForm = document.body.getElementById('myForm');
var formContent = sourceForm.innerHTML;

// Eerst leegmaken en dan vullen ivm id's
sourceForm.innerHTML = '';
myTempForm.innerHTML = formContent

[ Voor 24% gewijzigd door storeman op 23-04-2010 12:36 ]

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:53

crisp

Devver

Pixelated

Doe dat nou niet met innerHTML want daarmee reset je de formelementen juist...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 12-09 14:37
@Crisp:
Zoals ik op internet lees is documentFragment voor het toevoegen van elementen aan een bestaande element. Ik moet juist een element zonder content verwijderen.

@Storeman:
Ik maak geen gebruik van innerHTML. Overigens is dit ong. de oplossing die ik probeerde te ontwijken zoals je in de eerste post kan lezen

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
ZeroXT schreef op vrijdag 23 april 2010 @ 12:40:
@Crisp:
Zoals ik op internet lees is documentFragment voor het toevoegen van elementen aan een bestaande element. Ik moet juist een element zonder content verwijderen.
Dan moet je crisp's reactie nog eens goed lezen ;)
crisp schreef op vrijdag 23 april 2010 @ 12:28:
Technisch kan het overigens wel: maak een documentFragment object, stop daar alle children van je element in en vervang dat element vervolgens door je fragment :)

[ Voor 29% gewijzigd door RobIII op 23-04-2010 12:45 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 10-09 14:45
Kun je het niet in een divje hangen en die display: none; doen?

Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 12-09 14:37
Hmm maar die <form> maak ik niet met javascript.

code:
1
2
3
4
5
6
<form action="" method="post" enctype="multipart/form-data" id="upload_form">
    <label for="bestand0">Bestand 1:</label><input type="file" id="bestand0" name="bestand0" />
    <label for="tekst">Tekst:</label><input type="text" id="tekst" name="tekst" />
    <label for="bestand1">Bestand 2:</label><input type="file" id="bestand1" name="bestand1" />
    <input type="submit" value="Opslaan" />
</form>


Vervolgens loop ik door de form heen opzoek naar alle input types die de attribuut file hebben. Die geef ik een onchange mee dat wanneer er een bestand word geselecteerd er een form tag om die input komt te staan. En vervolgens moet ik de huidige form tijdelijk verwijderen.

Hoe kan ik dit oplossen met een documentFragment object of anders?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:31

MueR

Admin Tweakers Discord

is niet lief

Wat heb je ondertussen gedaan met de tips die je krijgt dan? Wat lukt er niet aan? We gaan namelijk geen kant en klare code voor je schrijven.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 12-09 14:37
Dat verwacht ik ook niet MueR. Ik heb natuurlijk zelf een hoop op internet proberen op te zoeken en nu vooral met betrekking tot documentFragment. Maar zie ik helaas niet in hoe ik een element kan verwijderen zonder zijn content dat niet is gemaakt door javascript.

Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
innerHTML = broncode kopieren = niet jouw oplossing
documentfragment = dom kopieren = wel jouw oplossing. Je kopieert dus al je gewenste inputs (~children van form) naar een nieuw element (vb div of whatever) en vervangt dan het formelement door het nieuwe element. Of wat crisp zei dus 8-) We gaan er hier van uit dat je al van DOM elementen hebt gehoord natuurlijk.

Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 12-09 14:37
Dus moet ik alsnog alles kopiëren en in één variabel zetten?

Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 12-09 11:48
Wat is het probleem van alles in één variabele zetten. Je moet het vrij gek maken wil je tegen die grens aanlopen. Na de actie je var even unsetten, en het lijkt me geen probleem.

Ik kan wel een andere oplossing aandragen, met MooTools. Ik gebruik het vaak zoals jij dat nu ook doet:

code:
1
2
3
4
5
6
7
var myForm = $('orignalForm');

var targetEl = $('myTarget');

myForm.getElements().each(function(el){
   targetEl.grab( el );
});

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 12-09 14:37
En heb je ook een voorbeeld zonder libary? Dit was mijn poging:

code:
1
document.getElementById('test').appendChild(this.form.childNodes);


Maar hiermee krijg ik de raarste error in firebug.

Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
JavaScript:
1
2
3
4
5
var contentframe = document.createElement('div');
var form = document.getElementById( 'uploadform' );
var inputs2move = form.childNodes();
contentframe.appendChild(inputs2move);
}

Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 12-09 14:37
form.childNodes() is not a function krijg ik als error te zien met jouw code moozzuzz.

code:
1
2
3
4
5
6
7
8
var test = document.createElement('div');

for (var i = 0; i < this.form.childNodes.length;i++)
{
test.appendChild(this.form.childNodes[i]);
}

document.getElementById('divje').appendChild(test);


Hiermee krijg ik geen fout maar word alleen de spaties gekopieerd en dus niet alle elementen

Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 12-09 11:48
Gebruik eens children ipv childnodes

[ Voor 173% gewijzigd door storeman op 23-04-2010 15:41 ]

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 12-09 14:37
Het is me gelukt met deze code:

code:
1
2
3
4
while(child = this.form.firstChild)
{
    document.getElementById('divje').appendChild(child);
}


Bedankt voor de hulp allen.

[ Voor 111% gewijzigd door ZeroXT op 23-04-2010 16:13 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Dat gat in feite niet. Wat wel kan (denk ik mooiste manier) is de inhoud van je container (form in dit geval) kopieren en dat de content maken van de parent van het te verwijderen element.
[code]
<a>
<b>
<c>bla</c>
</b>
<a>

delContainer(b){
helpvar = b.InnerHTML;
b.parent.InnerHTML = helpvar;
}
[/code]

zoiets, geen nette JS, maar het principe is er...
Nevermind

Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 12-09 14:37
Verwijderd schreef op vrijdag 23 april 2010 @ 16:12:
Dat gat in feite niet. Wat wel kan (denk ik mooiste manier) is de inhoud van je container (form in dit geval) kopieren en dat de content maken van de parent van het te verwijderen element.
code:
1
2
3
4
5
6
7
8
9
10
<a>
  <b>
    <c>bla</c>
  </b>
<a>

delContainer(b){
  helpvar = b.InnerHTML;
  b.parent.InnerHTML = helpvar;
}


zoiets, geen nette JS, maar het principe is er...
Bedankt voor je reactie maar had het al opgelost. Zie mijn vorige reactie :)

[ Voor 11% gewijzigd door ZeroXT op 23-04-2010 16:14 ]

Pagina: 1