Aller au contenu

Sujets conseillés

Posté

Je suis en train de développer une toute petite fonctionnalité en AJAX (j'utilise prototype), et je me heure à un souci minuscule :

J'ai une zone qui devra se remplir avec un Ajax.Updater (qui marche sans problème), ou manuellement en parsant un flux XML.

Tout se passe pour le mieux, sauf quand je tente de vider la zone en question pour y ajouter manuellement son contenu.

J'ai essayé quelques fonctions, qui ne semblent pas marcher à la perfection :

Je pensais utiliser celle-ci en premier lieu, elle me semblait la plus "propre" :

function vide(element) {
var elt = $(element);
while(elt.hasChildNodes)
elt.removeChild(elt.firstChild);
}

Mais je n'arrive plus à ajouter d'élément après coup (ce qui est fâcheux)

J'ai tenté de décomposer un peu plus dans une autre fonction, en listant tous les éléments enfants, et en les supprimant un à un, mais ça ne semble pas fonctionner non plus : il me laisse des enfants après coup.

function vide(element) {
var elt = $(element);
var enfants = elt.childNodes;
for(var i = 0; i < enfants.length; i++)
elt.removeChild(enfants[i]);
}

Y a t'il un bug dans mes fonctions ? Ou une fonction miracle qui le fait déjà (voire une fonction interne de prototype ?)

Posté

Salut

Désolé je vais répondre à côté.

Mais effacer le contenu d'un élément pour ensuite ajouter un nouveau contenu, chez moi ça s'appelle "remplacer".

Et qui dit remplacer dit replaceChild.

Non ? :unsure:

edit: et en remplaçant ton while du premier code par

while elt.firstChild

ça donne quoi ?

firstChild renvoie null si aucun enfant n'existe.

Posté

L'effaçage et le remplacement se font en deux étapes (et je réutilise la fonction), d'où la nécessité de supprimer d'abord.

Et je n'ai pas qu'un enfant à changer, mais éventuellement plusieurs.

Pour le while elt.firstChild, je teste ça dès que j'arrive au boulot.

Merci, en tout cas !

Posté

Bonjour,

Prototype permet de faire ceci simplement grâce à la fonction "update". Pour vider un élément il suffit de l'appeler sans paramètre, dans ton cas :

function vide(element) {
$(element).update();
}

Si tu souhaite directement remplacer le contenu je te laisse lire la page "update" de l'API de Prototype. :)

Bonne continuation ;)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...