2016-05-14 12 views
5

Qual è il modo più efficiente per scrivere questo:JQuery se() vs: contiene

if ($('.shipping .price').text() === "FREE"){ 
    $('.shipping .price').addClass('text-primary'); 
} 

O

$('.shipping .price:contains("FREE")').addClass('text-primary'); 
+8

Beh, i due non sono equivalenti, per cominciare. Il secondo può abbinare più nodi rispetto al primo. – dfsq

+0

Anche la domanda in sé è ambigua ... il secondo è ovviamente meno linee di codice e più * "efficiente da scrivere" * ma ciò non equivale necessariamente a * "più efficiente da elaborare" * – charlietfl

+1

Supponendo che si tratti di prestazioni, il tuo potrebbe essere una buona lettura: http://stackoverflow.com/questions/111368/how-do-you-performance-test-javascript-code –

risposta

3

Un quick test mostra che il codice con if gestisce circa 5 volte più veloce rispetto al uno con il selettore contains. Tuttavia, come altri hanno già spiegato nei commenti, i due non sono equivalenti.

Si potrebbe accelerare le cose ancora di più mettendo in cache la chiamata a $('.shipping .price') in questo modo:

var elem = $('.shipping .price'); 
if (elem.text() === "FREE"){ 
    elem.addClass('text-primary'); 
} 

Tuttavia, per quasi tutte le differenze di prestazioni scenario di vita reale non importerà a tutti e si dovrebbe andare per l'opzione questo è più efficiente da leggere per gli altri umani. Se ti preoccupi veramente delle prestazioni (ad esempio se hai un listino prezzi piuttosto grande) dovresti usare vanilla JS che è circa 10 volte più veloce in questo caso.