Al igual que en su $$ enfoque, he creado una función (del mismo nombre) que utiliza un patrón de memorización para mantener limpia global y también da cuenta de un segundo parámetro de contexto ... como $$ (". clase "," #context "). Esto es necesario si usa la función encadenada find() que ocurre después de que se devuelve $$; por lo tanto, no se almacenará en caché solo a menos que guarde en caché el objeto de contexto primero. También agregué un parámetro booleano al final (segundo o tercer parámetro dependiendo de si usa el contexto) para forzarlo a regresar al DOM.
Código:
function $$(a, b, c){
var key;
if(c){
key = a + "," + b;
if(!this.hasOwnProperty(key) || c){
this[key] = $(a, b);
}
}
else if(b){
if(typeof b == "boolean"){
key = a;
if(!this.hasOwnProperty(key) || b){
this[key] = $(a);
}
}
else{
key = a + "," + b;
this[key] = $(a, b);
}
}
else{
key = a;
if(!this.hasOwnProperty(key)){
this[key] = $(a);
}
}
return this[key];
}
Uso:
<div class="test">a</div>
<div id="container">
<div class="test">b</div>
</div>
<script>
$$(".test").append("1"); //default behavior
$$(".test", "#container").append("2"); //contextual
$$(".test", "#container").append("3"); //uses cache
$$(".test", "#container", true).append("4"); //forces back to the dome
</script>
En mi opinión, debe almacenar en caché selectores únicos, como ID's. También sería bueno si hubiera un complemento que permita el almacenamiento en caché de todos los otros selectores. –
jQuery team lo indicó aquí. https://learn.jquery.com/using-jquery-core/selecting-elements/#saving-selections – trungk18