2010-02-14 7 views
1

J'utilise le code suivant pour supprimer un élément de l'arbre DOM:élément HTML par Id

function onItemDeleted(name) { 

      $("#" + name).remove();      

     } 

Serait-ce mauvais pour la performance puisque je ne suis pas indiquais tout parent de l'élément. L'élément est un TR contenu dans un élément TABLE. La recherche DOM pour cet élément commencera en haut qui pourrait être BODY. Alors, serait-il quelque chose comme ceci:

CORPS => DIV => TABLE => TR (trouvé)

Si je trouve le parent de TR qui est TABLE serait comme la recherche suivante:

TABLEAU -> TR

Je ne sais pas si ci-dessus sera vrai car je pense que la recherche commencera toujours au nœud racine.

+0

Avez-vous rencontré des problèmes de performances? –

+0

Non, je ne rencontre aucun problème de performances. – azamsharp

Répondre

7

jQuery optimise pour les recherches d'ID. Donc, $("#" + name) est effectivement le même que $(document.getElementById(name)). De la source, ligne 120 (1.4):

// HANDLE: $("#id") 
} else { 
    elem = document.getElementById(match[2]); 
+0

Je pense qu'il vaudrait mieux tenir le parent lors d'un grand nombre de suppressions dans un court laps de temps. Depuis, nous n'avons pas besoin de rechercher l'élément DOM pour l'élément encore et encore. – azamsharp

+0

Incidemment, ce n'est pas * tout * le même que 'getElementById', car un caractère' .' ou ':' dans l'ID (qui sont tous les deux valides) casserait la version du sélecteur. – bobince

3

La différence de performance serait probablement négligeable.

0

Je suppose que lorsque vous trouvez des éléments par ID, le temps de recherche devrait être O(1) car il ne peut y avoir qu'un seul élément avec cet ID.

Questions connexes