2008-11-07 9 views
4

Je construis le code HTML dans un objet DOM XML à utiliser comme contenu du innerHTML d'un élément div en utilisant un modèle XSL. Traditionnellement, nous créons un nouveau document DOM XML et ajoutons les paramètres d'entrée en tant qu'éléments XML pour la transformation via javascript. Tout cela prend beaucoup de temps car nous sélectionnons à la main les données d'un autre document XML qui représente notre compte actuel et copions les données dans un document DOM XML transitoire. Ce que je voudrais faire est de cloner le nœud pertinent du document de compte (c'est-à-dire des informations client) et de l'utiliser comme base pour la transformation. Je ne souhaite pas utiliser le document de compte directement, car je souhaite pouvoir ajouter une entrée spécifique à la transformation, sans modifier l'objet de compte.Quelle est l'efficacité de element.cloneNode (true) (deep clone)?

Quelle est l'efficacité d'utiliser .cloneNode (true) pour un nœud souhaité d'environ typiquement moins de 200 éléments d'un document de typiquement 2000+ éléments? La plateforme cible est IE6 sans outils externes (c'est-à-dire ActiveX).

+2

Cette question a besoin d'être éditée pour clarifier le fait que vous êtes en train de discuter XML DOM cloneNode pas HTML DOM cloneNode qui sur IE est entièrement différent des bases de code. – AnthonyWJones

Répondre

3

CloneNode est assez efficace mais wi Je vais consommer plus de mémoire en le faisant de cette façon.

Une autre approche à considérer est d'utiliser un objet Modèle et un processeur, de transmettre vos données supplémentaires/modifiées en tant que paramètres au processeur et à l'élément que vous auriez cloné autrement comme élément d'entrée. Cette approche nécessiterait des mods assez significatifs pour le XSL.

+0

Je me risquerais à dire que l'utilisation d'un objet modèle n'améliorera probablement pas la vitesse. L'objet modèle utilise probablement 'cloneNode' ou construit un nouvel arbre DOM en interne. – Azmisov

2

IE échouera sur certaines choses.

par exemple. les cases à cocher/cases cochées ne seront pas vérifiées lorsque vous ajouterez votre copie au DOM.

Exemple:

http://webbugtrack.blogspot.com/2008/03/bug-199-cant-clone-form-element-in-ie.html

http://webbugtrack.blogspot.com/2007/08/bug-242-setattribute-doesnt-always-work.html

Pour voir ce que IE va effectivement revenir, essayez de remplacer l'URL avec cela dans la barre d'adresse d'un de vos pages, et appuyez sur Entrée.

javascript:'<xmp>'+window.document.body.outerHTML+'</xmp>'; 

Si vous êtes satisfait des résultats, une grande !, mais je pense que vous finirez par moins que satisfait de ce que IE retourne (à la fois dans les DOM, et cette valeur equivelant.

+0

Si je comprends bien le problème, ce n'est pas que les cases à cocher ne seront pas vérifiées. IE copie l'état initial des cases à cocher et autres balises –

+0

Je pense que le plus gros truc est que lorsque vous copiez un champ de formulaire qui a un 'name' (99%), vous pouvez seulement *" kind of "* le renommer. par exemple. Il sera soumis avec le nouveau nom, mais l'accès à partir de DOM 0 'myForm.elements [newName]' échouera. Malheureusement c'est seulement 1 problème avec le clonage dans IE. – scunliffe

0
« string »

Si vous n'avez pas besoin forme-éléments, cloneNode est un véritable outil fiable ...

- et à insérer ajax-données, il est incroyable efficacité ...

Cependant, comme en particulier IE a un historique de problèmes avec les attributs de nom, il est incommode d'adresser hese si vous insérez des données ...

- Je ne comprends pas vraiment votre XSL (T) -utilisation, pour moi, il semble que l'utilisation d'une station-service comme un (pas! -) endroit pratique pour changer un 1960 Virginie-Occidentale à 2008 Skoda ...

Userely ils ont une technologie commune, bien qu'il ne soit pas utilisé de la même manière, l'informatisation d'une certaine façon est juste un problème mineur, les problèmes majeurs est dans presque toute autre o façon]

Avez-vous besoin de la forme-éléments -?)