Подобно вашему подходу $$, я создал функцию (с тем же именем), которая использует шаблон запоминания, чтобы поддерживать глобальную чистоту, а также учитывает второй параметр контекста ... как $$ (". Class", " #context "). Это необходимо, если вы используете цепочечную функцию find (), которая происходит после возврата $$; таким образом, он не будет кэшироваться один, если вы сначала не кешируете объект контекста. Я также добавил логический параметр в конец (2-й или 3-й параметр в зависимости от того, используете ли вы контекст), чтобы заставить его вернуться к DOM.
Код:
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];
}
Использование:
<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>