Sustitución de jQuery para cada uno con
-
20-09-2019 - |
Pregunta
He estado usando $ .Cada hacer iteraciones desde hace un tiempo, pero sigo al oír la gente dice de usar JS nativas para hacer bucles. Estoy muy preocupado por el rendimiento, pero no estoy seguro de si siempre es posible reemplazar $ .Cada por de una manera significativa.
Así que mis preguntas son, ¿es posible reemplazar siempre $ .Cada por, y si no ¿cuál es la regla de oro para cuando se puede hacer y cuando no puede.
Tengo una cada de esta manera:
$this.find("div.class").each(function (){
var $thisparent = $(this).parent();
if (condition) {
$(this).prepend($thisparent.text());
}
if (condition2) {
$(this).prepend($thisparent.text());
}
});
Solución
Esto es lo que hace con jQuery .each
, básicamente
$.fn.each = function(callback) {
var i, length = this.length;
for(i = 0; i < length; ++i) {
callback.call(this[i]);
}
};
Así que no es difícil de sustituir de su función anónima 'contenido' con la llamada callback.call
. Sólo asegúrese de reemplazar this
con un temporal con el objeto jQuery.
La conversión de su código suministrado:
var foo = $this.find("div.class"),
fooLength = foo.length,
i,
$thisparent;
for (i = 0; i < fooLength; ++i) {
$thisparent = $(foo[i]).parent();
if (condition) {
$(foo[i]).prepend($thisparent.text());
}
if (condition2) {
$(foo[i]).prepend($thisparent.text());
}
}
Para la velocidad adicional (potencial), foo[i]
caché en un temporal. también, y asignar $thisparent
sólo cuando sea necesario. Si condition
y condition2
son mutuamente excluyentes, utilizar una sola if (condition || condition2)
.
Otros consejos
Alguien comparó el rendimiento de for
y $.each
:
http: // jquery- howto.blogspot.com/2009/06/javascript-for-loop-vs-jquery-each.html