var buildFragment = function(args, nodes, scripts){var fragment, cacheable, cacheresults, doc, first = args[0];/*** 继续使用原来的doc*/if (nodes && nodes[0]) {doc = nodes[0].ownerDocument || nodes[0];}// Ensure that an attr object doesn't incorrectly stand in as a document// object// Chrome and Firefox seem to allow this to occur and will throw// exception// Fixes #8950/*** documentFragment 是一个无父窗口的document对象,相当于缓冲区*/if (!doc.createDocumentFragment) {doc = document;}// Only cache "small" (1/2 KB) HTML strings that are associated with the// main document// Cloning options loses the selected state, so don't cache them// IE 6 doesn't like it when you put <object> or <embed> elements in a// fragment// Also, WebKit does not clone 'checked' attributes on cloneNode, so// don't cache// Lastly, IE6,7,8 will not correctly reuse cached fragments that were// created from unknown elems #10501if (args.length === 1 && typeof first === "string" && first.length < 512 && doc === document && first.charAt(0) === "<" && !rnocache.test(first) && (jQuery.support.checkClone || !rchecked.test(first)) && (jQuery.support.html5Clone || !rnoshimcache.test(first))) {cacheable = true;//支持缓存cacheresults = jQuery.fragments[first];//将first缓存起来if (cacheresults && cacheresults !== 1) {fragment = cacheresults;}}/*** 缓存不存在*/if (!fragment) {fragment = doc.createDocumentFragment();//创建文档缓存jQuery.clean(args, doc, fragment, scripts);}/*** 如果支持缓存*/if (cacheable) {jQuery.fragments[first] = cacheresults ? fragment : 1;}/*** 返回缓存信息*/return {fragment: fragment,cacheable: cacheable};};
待写