code: function compile($compileNode, transcludeFn, maxPriority) {
        if (!($compileNode instanceof jqLite)) {
          // jquery always rewraps, where as we need to preserve the original selector so that we can modify it.
          $compileNode = jqLite($compileNode);
        }
        // We can not compile top level text elements since text nodes can be merged and we will
        // not be able to attach scope data to them, so we will wrap them in <span>
        forEach($compileNode, function(node, index){
          if (node.nodeType == 3 /* text node */) {
            $compileNode[index] = jqLite(node).wrap('<span></span>').parent()[0];
          }
        });
        var compositeLinkFn = compileNodes($compileNode, transcludeFn, $compileNode, maxPriority);
        return function(scope, cloneConnectFn){
          assertArg(scope, 'scope');
          // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart
          // and sometimes changes the structure of the DOM.
          var $linkNode = cloneConnectFn
            ? JQLitePrototype.clone.call($compileNode) // IMPORTANT!!!
            : $compileNode;
          $linkNode.data('$scope', scope);
          safeAddClass($linkNode, 'ng-scope');
          if (cloneConnectFn) cloneConnectFn($linkNode, scope);
          if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode);
          return $linkNode;
        };
      }
docs: ================================