2009-09-25 9 views

Répondre

2

Pour répondre à votre question, la première sera plus rapide. Vous n'appellerez qu'une seule fois getElementById. Une chose à noter est que le paramètre context attend un noeud HTML et pas un objet jQuery. Dans votre cas, le deuxième point est toujours à la recherche dans le document plutôt qu'à l'intérieur

$('#' + strContextId) 

Assurez-vous d'ajouter [0] sur l'extrémité de l'objet jQuery pour passer le noeud HTML. Pour tester cela, vous pouvez utiliser la propriété context pour vérifier dans quel contexte le sélecteur est sélectionné. Pour vos exemples ci-dessus, vous pouvez le faire

console.log($('#' + strControlId).context); 
console.log($('#' + strControlId, $('#' + strContextId)).context); 

Et vous constaterez qu'ils retournent tous les deux le contexte "Document". Si vous exécutez

console.log($('#' + strControlId, $('#' + strContextId)[0]).context); 

Il doit retourner n'importe quel élément $ ('#' + strContextId) pointe également.

+0

jQuery prend en fait un autre élément jQuery ou pur DOM comme contexte. –

+0

Donc, vous dites console.log ($ ('#' + strControlId) .context); console.log ($ ('#' + strControlId, $ ('#' + strContextId)). Contexte); retournera la même chose? Ouvrez firebug et exécutez ces commandes sur cette page console.log ($ ('# header'). Context); console.log ($ ('# header', $ ('. Container')). Context); Vous constaterez qu'ils retournent tous les deux Document comme contexte. Cela ne montre-t-il pas que les objets jQuery ne sont pas autorisés? –

0

Je pense que le premier serait plus rapide (ça fait moins). Bien que quand je pense à l'aide du paramètre de contexte, je pense à faire des choses comme l'accès à des champs dans un document parent d'un iframe ou quelque chose comme:

var el = $('#' + strControlId, parent.document); 

Vous pouvez essayer quelques points de repère si vous êtes vraiment curieux.

+0

Je n'ai pas accès à l'environnement jquery pour lancer un test, mais je le ferai quand j'aurai une chance – Nick

0

Étant donné que vous utilisez un ID comme votre requête, je doute que ce soit plus rapide.

Un bon exemple serait ceci.

var inputs = $('input'); 
$('[class=this][name=that]', inputs).css('color', 'red');