module

Prev Top Next
// Fake jQuery
// Usage:
//   $$('#mySelector') // element
//   $$.cacheLength() // int (number of selectors in cache)

var $$ = (function(){
  // private variables
  var elementCache = {},
    cacheSize = 0;

  var base = function(selector){
    // check if it's already cached
    var elt = elementCache[selector];
    if (!elt){
      elt = 'fakeElement'; // we would actually use document.getElementById(), etc.
      elementCache[selector] = elt; // cache it
      cacheSize++;
    }
    return elt;
  };

  base.cacheLength = function(){
    return cacheSize;
  };

  // return public API as a function/object
  return base;
})();


assertTripleEqual($$.elementCache, undefined, "private variables should be undefined");
assertTripleEqual($$.cacheLength(), 0, "cache should be empty to start");

var elt = $$('#myDiv');

assertTripleEqual($$.cacheLength(), 1, "cache should be incremented after query");

var sameElt = $$('#myDiv');

assertTripleEqual($$.cacheLength(), 1, "cache should be not be incremented for a repeated query");