JAVASCRIPT   13

node.js

Guest on 25th July 2021 04:19:51 PM

  1.  
  2. function _get(val) {
  3.         return K(val)[0];
  4. }
  5.  
  6. function _getDoc(node) {
  7.         if (!node) {
  8.                 return document;
  9.         }
  10.         return node.ownerDocument || node.document || node;
  11. }
  12.  
  13. function _getWin(node) {
  14.         if (!node) {
  15.                 return window;
  16.         }
  17.         var doc = _getDoc(node);
  18.         return doc.parentWindow || doc.defaultView;
  19. }
  20.  
  21. function _setHtml(el, html) {
  22.         if (el.nodeType != 1) {
  23.                 return;
  24.         }
  25.         var doc = _getDoc(el);
  26.         try {
  27.                 el.innerHTML = '<img id="__kindeditor_temp_tag__" width="0" height="0" style="display:none;" />' + html;
  28.                 var temp = doc.getElementById('__kindeditor_temp_tag__');
  29.                 temp.parentNode.removeChild(temp);
  30.         } catch(e) {
  31.                 // bugfix: 在IE上innerHTML有时候报错
  32. ¶å€™æŠ¥é”™
  33.                 K(el).empty();
  34.                 K('@' + html, doc).each(function() {
  35.                         el.appendChild(this);
  36.                 });
  37.         }
  38. }
  39.  
  40. function _hasClass(el, cls) {
  41.         return _inString(cls, el.className, ' ');
  42. }
  43.  
  44. function _setAttr(el, key, val) {
  45.         if (_IE && _V < 8 && key.toLowerCase() == 'class') {
  46.                 key = 'className';
  47.         }
  48.         el.setAttribute(key, '' + val);
  49. }
  50.  
  51. function _removeAttr(el, key) {
  52.         if (_IE && _V < 8 && key.toLowerCase() == 'class') {
  53.                 key = 'className';
  54.         }
  55.         _setAttr(el, key, '');
  56.         el.removeAttribute(key);
  57. }
  58.  
  59. function _getNodeName(node) {
  60.         if (!node || !node.nodeName) {
  61.                 return '';
  62.         }
  63.         return node.nodeName.toLowerCase();
  64. }
  65.  
  66. function _computedCss(el, key) {
  67.         var self = this, win = _getWin(el), camelKey = _toCamel(key), val = '';
  68.         if (win.getComputedStyle) {
  69.                 var style = win.getComputedStyle(el, null);
  70.                 val = style[camelKey] || style.getPropertyValue(key) || el.style[camelKey];
  71.         } else if (el.currentStyle) {
  72.                 val = el.currentStyle[camelKey] || el.style[camelKey];
  73.         }
  74.         return val;
  75. }
  76.  
  77. function _hasVal(node) {
  78.         return !!_VALUE_TAG_MAP[_getNodeName(node)];
  79. }
  80.  
  81. function _docElement(doc) {
  82.         doc = doc || document;
  83.         return _QUIRKS ? doc.body : doc.documentElement;
  84. }
  85.  
  86. function _docHeight(doc) {
  87.         var el = _docElement(doc);
  88.         return Math.max(el.scrollHeight, el.clientHeight);
  89. }
  90.  
  91. function _docWidth(doc) {
  92.         var el = _docElement(doc);
  93.         return Math.max(el.scrollWidth, el.clientWidth);
  94. }
  95.  
  96. function _getScrollPos(doc) {
  97.         doc = doc || document;
  98.         var x, y;
  99.         if (_IE || _NEWIE || _OPERA) {
  100.                 x = _docElement(doc).scrollLeft;
  101.                 y = _docElement(doc).scrollTop;
  102.         } else {
  103.                 x = _getWin(doc).scrollX;
  104.                 y = _getWin(doc).scrollY;
  105.         }
  106. // create KNode class
  107. ;
  108. }
  109.  
  110. // create KNode class
  111. function KNode(node) {
  112.         this.init(node);
  113. }
  114. _extend(KNode, {
  115.         init : function(node) {
  116.                 var self = this;
  117.                 node = _isArray(node) ? node : [node];
  118.                 var length = 0;
  119.                 for (var i = 0, len = node.length; i < len; i++) {
  120.                         if (node[i]) {
  121.                                 self[i] = node[i].constructor === KNode ? node[i][0] : node[i];
  122.                                 length++;
  123.                         }
  124.                 }
  125.                 self.length = length;
  126.                 self.doc = _getDoc(self[0]);
  127.                 self.name = _getNodeName(self[0]);
  128.                 self.type = self.length > 0 ? self[0].nodeType : null;
  129.                 self.win = _getWin(self[0]);
  130.         },
  131.         each : function(fn) {
  132.                 var self = this;
  133.                 for (var i = 0; i < self.length; i++) {
  134.                         if (fn.call(self[i], i, self[i]) === false) {
  135.                                 return self;
  136.                         }
  137.                 }
  138.                 return self;
  139.         },
  140.         bind : function(type, fn) {
  141.                 this.each(function() {
  142.                         _bind(this, type, fn);
  143.                 });
  144.                 return this;
  145.         },
  146.         unbind : function(type, fn) {
  147.                 this.each(function() {
  148.                         _unbind(this, type, fn);
  149.                 });
  150.                 return this;
  151.         },
  152.         fire : function(type) {
  153.                 if (this.length < 1) {
  154.                         return this;
  155.                 }
  156.                 _fire(this[0], type);
  157.                 return this;
  158.         },
  159.         hasAttr : function(key) {
  160.                 if (this.length < 1) {
  161.                         return false;
  162.                 }
  163.                 return !!_getAttr(this[0], key);
  164.         },
  165.         attr : function(key, val) {
  166.                 var self = this;
  167.                 if (key === undefined) {
  168.                         return _getAttrList(self.outer());
  169.                 }
  170.                 if (typeof key === 'object') {
  171.                         _each(key, function(k, v) {
  172.                                 self.attr(k, v);
  173.                         });
  174.                         return self;
  175.                 }
  176.                 if (val === undefined) {
  177.                         val = self.length < 1 ? null : _getAttr(self[0], key);
  178.                         return val === null ? '' : val;
  179.                 }
  180.                 self.each(function() {
  181.                         _setAttr(this, key, val);
  182.                 });
  183.                 return self;
  184.         },
  185.         removeAttr : function(key) {
  186.                 this.each(function() {
  187.                         _removeAttr(this, key);
  188.                 });
  189.                 return this;
  190.         },
  191.         get : function(i) {
  192.                 if (this.length < 1) {
  193.                         return null;
  194.                 }
  195.                 return this[i || 0];
  196.         },
  197.         eq : function(i) {
  198.                 if (this.length < 1) {
  199.                         return null;
  200.                 }
  201.                 return this[i] ? new KNode(this[i]) : null;
  202.         },
  203.         hasClass : function(cls) {
  204.                 if (this.length < 1) {
  205.                         return false;
  206.                 }
  207.                 return _hasClass(this[0], cls);
  208.         },
  209.         addClass : function(cls) {
  210.                 this.each(function() {
  211.                         if (!_hasClass(this, cls)) {
  212.                                 this.className = _trim(this.className + ' ' + cls);
  213.                         }
  214.                 });
  215.                 return this;
  216.         },
  217.         removeClass : function(cls) {
  218.                 this.each(function() {
  219.                         if (_hasClass(this, cls)) {
  220.                                 this.className = _trim(this.className.replace(new RegExp('(^|\\s)' + cls + '(\\s|$)'), ' '));
  221.                         }
  222.                 });
  223.                 return this;
  224.         },
  225.         html : function(val) {
  226.                 var self = this;
  227.                 if (val === undefined) {
  228.                         if (self.length < 1 || self.type != 1) {
  229.                                 return '';
  230.                         }
  231.                         return _formatHtml(self[0].innerHTML);
  232.                 }
  233.                 self.each(function() {
  234.                         _setHtml(this, val);
  235.                 });
  236.                 return self;
  237.         },
  238.         text : function() {
  239.                 var self = this;
  240.                 if (self.length < 1) {
  241.                         return '';
  242.                 }
  243.                 return _IE ? self[0].innerText : self[0].textContent;
  244.         },
  245.         hasVal : function() {
  246.                 if (this.length < 1) {
  247.                         return false;
  248.                 }
  249.                 return _hasVal(this[0]);
  250.         },
  251.         val : function(val) {
  252.                 var self = this;
  253.                 if (val === undefined) {
  254.                         if (self.length < 1) {
  255.                                 return '';
  256.                         }
  257.                         return self.hasVal() ? self[0].value : self.attr('value');
  258.                 } else {
  259.                         self.each(function() {
  260.                                 if (_hasVal(this)) {
  261.                                         this.value = val;
  262.                                 } else {
  263.                                         _setAttr(this, 'value' , val);
  264.                                 }
  265.                         });
  266.                         return self;
  267.                 }
  268.         },
  269.         css : function(key, val) {
  270.                 var self = this;
  271.                 if (key === undefined) {
  272.                         return _getCssList(self.attr('style'));
  273.                 }
  274.                 if (typeof key === 'object') {
  275.                         _each(key, function(k, v) {
  276.                                 self.css(k, v);
  277.                         });
  278.                         return self;
  279.                 }
  280.                 if (val === undefined) {
  281.                         if (self.length < 1) {
  282.                                 return '';
  283.                         }
  284.                         return self[0].style[_toCamel(key)] || _computedCss(self[0], key) || '';
  285.                 }
  286.                 self.each(function() {
  287.                         this.style[_toCamel(key)] = val;
  288.                 });
  289.                 return self;
  290.         },
  291.         width : function(val) {
  292.                 var self = this;
  293.                 if (val === undefined) {
  294.                         if (self.length < 1) {
  295.                                 return 0;
  296.                         }
  297.                         return self[0].offsetWidth;
  298.                 }
  299.                 return self.css('width', _addUnit(val));
  300.         },
  301.         height : function(val) {
  302.                 var self = this;
  303.                 if (val === undefined) {
  304.                         if (self.length < 1) {
  305.                                 return 0;
  306.                         }
  307.                         return self[0].offsetHeight;
  308.                 }
  309.                 return self.css('height', _addUnit(val));
  310.         },
  311.         opacity : function(val) {
  312.                 this.each(function() {
  313.                         if (this.style.opacity === undefined) {
  314.                                 this.style.filter = val == 1 ? '' : 'alpha(opacity=' + (val * 100) + ')';
  315.                         } else {
  316.                                 this.style.opacity = val == 1 ? '' : val;
  317.                         }
  318.                 });
  319.                 return this;
  320.         },
  321.         data : function(key, val) {
  322.                 var self = this;
  323.                 key = 'kindeditor_data_' + key;
  324.                 if (val === undefined) {
  325.                         if (self.length < 1) {
  326.                                 return null;
  327.                         }
  328.                         return self[0][key];
  329.                 }
  330.                 this.each(function() {
  331.                         this[key] = val;
  332.                 });
  333.                 return self;
  334.         },
  335.         pos : function() {
  336.                 var self = this, node = self[0], x = 0, y = 0;
  337.                 if (node) {
  338.                         if (node.getBoundingClientRect) {
  339.                                 var box = node.getBoundingClientRect(),
  340.                                         pos = _getScrollPos(self.doc);
  341.                                 x = box.left + pos.x;
  342.                                 y = box.top + pos.y;
  343.                         } else {
  344.                                 while (node) {
  345.                                         x += node.offsetLeft;
  346.                                         y += node.offsetTop;
  347.                                         node = node.offsetParent;
  348.                                 }
  349.                         }
  350.                 }
  351.                 return {x : _round(x), y : _round(y)};
  352.         },
  353.         clone : function(bool) {
  354.                 if (this.length < 1) {
  355.                         return new KNode([]);
  356.                 }
  357.                 return new KNode(this[0].cloneNode(bool));
  358.         },
  359.         append : function(expr) {
  360.                 this.each(function() {
  361.                         if (this.appendChild) {
  362.                                 this.appendChild(_get(expr));
  363.                         }
  364.                 });
  365.                 return this;
  366.         },
  367.         appendTo : function(expr) {
  368.                 this.each(function() {
  369.                         _get(expr).appendChild(this);
  370.                 });
  371.                 return this;
  372.         },
  373.         before : function(expr) {
  374.                 this.each(function() {
  375.                         this.parentNode.insertBefore(_get(expr), this);
  376.                 });
  377.                 return this;
  378.         },
  379.         after : function(expr) {
  380.                 this.each(function() {
  381.                         if (this.nextSibling) {
  382.                                 this.parentNode.insertBefore(_get(expr), this.nextSibling);
  383.                         } else {
  384.                                 this.parentNode.appendChild(_get(expr));
  385.                         }
  386.                 });
  387.                 return this;
  388.         },
  389.         replaceWith : function(expr) {
  390.                 var nodes = [];
  391.                 this.each(function(i, node) {
  392.                         _unbind(node);
  393.                         var newNode = _get(expr);
  394.                         node.parentNode.replaceChild(newNode, node);
  395.                         nodes.push(newNode);
  396.                 });
  397.                 return K(nodes);
  398.         },
  399.         empty : function() {
  400.                 var self = this;
  401.                 self.each(function(i, node) {
  402.                         var child = node.firstChild;
  403.                         while (child) {
  404.                                 if (!node.parentNode) {
  405.                                         return;
  406.                                 }
  407.                                 var next = child.nextSibling;
  408.                                 child.parentNode.removeChild(child);
  409.                                 child = next;
  410.                         }
  411.                 });
  412.                 return self;
  413.         },
  414.         remove : function(keepChilds) {
  415.                 var self = this;
  416.                 self.each(function(i, node) {
  417.                         if (!node.parentNode) {
  418.                                 return;
  419.                         }
  420.                         _unbind(node);
  421.                         if (keepChilds) {
  422.                                 var child = node.firstChild;
  423.                                 while (child) {
  424.                                         var next = child.nextSibling;
  425.                                         node.parentNode.insertBefore(child, node);
  426.                                         child = next;
  427.                                 }
  428.                         }
  429.                         node.parentNode.removeChild(node);
  430.                         delete self[i];
  431.                 });
  432.                 self.length = 0;
  433.                 return self;
  434.         },
  435.         show : function(val) {
  436.                 var self = this;
  437.                 if (val === undefined) {
  438.                         val = self._originDisplay || '';
  439.                 }
  440.                 if (self.css('display') != 'none') {
  441.                         return self;
  442.                 }
  443.                 return self.css('display', val);
  444.         },
  445.         hide : function() {
  446.                 var self = this;
  447.                 if (self.length < 1) {
  448.                         return self;
  449.                 }
  450.                 self._originDisplay = self[0].style.display;
  451.                 return self.css('display', 'none');
  452.         },
  453.         outer : function() {
  454.                 var self = this;
  455.                 if (self.length < 1) {
  456.                         return '';
  457.                 }
  458.                 var div = self.doc.createElement('div'), html;
  459.                 div.appendChild(self[0].cloneNode(true));
  460.                 html = _formatHtml(div.innerHTML);
  461.                 div = null;
  462.                 return html;
  463.         },
  464.         isSingle : function() {
  465.                 return !!_SINGLE_TAG_MAP[this.name];
  466.         },
  467.         isInline : function() {
  468.                 return !!_INLINE_TAG_MAP[this.name];
  469.         },
  470.         isBlock : function() {
  471.                 return !!_BLOCK_TAG_MAP[this.name];
  472.         },
  473.         isStyle : function() {
  474.                 return !!_STYLE_TAG_MAP[this.name];
  475.         },
  476.         isControl : function() {
  477.                 return !!_CONTROL_TAG_MAP[this.name];
  478.         },
  479.         contains : function(otherNode) {
  480.                 if (this.length < 1) {
  481.                         return false;
  482.                 }
  483.                 return _contains(this[0], _get(otherNode));
  484.         },
  485.         parent : function() {
  486.                 if (this.length < 1) {
  487.                         return null;
  488.                 }
  489.                 var node = this[0].parentNode;
  490.                 return node ? new KNode(node) : null;
  491.         },
  492.         children : function() {
  493.                 if (this.length < 1) {
  494.                         return new KNode([]);
  495.                 }
  496.                 var list = [], child = this[0].firstChild;
  497.                 while (child) {
  498.                         if (child.nodeType != 3 || _trim(child.nodeValue) !== '') {
  499.                                 list.push(child);
  500.                         }
  501.                         child = child.nextSibling;
  502.                 }
  503.                 return new KNode(list);
  504.         },
  505.         first : function() {
  506.                 var list = this.children();
  507.                 return list.length > 0 ? list.eq(0) : null;
  508.         },
  509.         last : function() {
  510.                 var list = this.children();
  511.                 return list.length > 0 ? list.eq(list.length - 1) : null;
  512.         },
  513.         index : function() {
  514.                 if (this.length < 1) {
  515.                         return -1;
  516.                 }
  517.                 var i = -1, sibling = this[0];
  518.                 while (sibling) {
  519.                         i++;
  520.                         sibling = sibling.previousSibling;
  521.                 }
  522.                 return i;
  523.         },
  524.         prev : function() {
  525.                 if (this.length < 1) {
  526.                         return null;
  527.                 }
  528.                 var node = this[0].previousSibling;
  529.                 return node ? new KNode(node) : null;
  530.         },
  531.         next : function() {
  532.                 if (this.length < 1) {
  533.                         return null;
  534.                 }
  535.                 var node = this[0].nextSibling;
  536.                 return node ? new KNode(node) : null;
  537.         },
  538.         scan : function(fn, order) {
  539.                 if (this.length < 1) {
  540.                         return;
  541.                 }
  542.                 order = (order === undefined) ? true : order;
  543.                 function walk(node) {
  544.                         var n = order ? node.firstChild : node.lastChild;
  545.                         while (n) {
  546.                                 var next = order ? n.nextSibling : n.previousSibling;
  547.                                 if (fn(n) === false) {
  548.                                         return false;
  549.                                 }
  550.                                 if (walk(n) === false) {
  551.                                         return false;
  552.                                 }
  553.                                 n = next;
  554.                         }
  555.                 }
  556.                 walk(this[0]);
  557.                 return this;
  558.         }
  559. });
  560.  
  561. _each(('blur,focus,focusin,focusout,load,resize,scroll,unload,click,dblclick,' +
  562.         'mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,' +
  563.         'change,select,submit,keydown,keypress,keyup,error,contextmenu').split(','), function(i, type) {
  564.         KNode.prototype[type] = function(fn) {
  565.                 return fn ? this.bind(type, fn) : this.fire(type);
  566.         };
  567. });
  568.  
  569. var _K = K;
  570.  
  571. K = function(expr, root) {
  572.         if (expr === undefined || expr === null) {
  573.                 return;
  574.         }
  575.         function newNode(node) {
  576.                 if (!node[0]) {
  577.                         node = [];
  578.                 }
  579.                 return new KNode(node);
  580.         }
  581.         if (typeof expr === 'string') {
  582.                 if (root) {
  583.                         root = _get(root);
  584.                 }
  585.                 var length = expr.length;
  586.                 if (expr.charAt(0) === '@') {
  587.                         ex// HTML
  588. r.// 包含HTMLä»£ç ï¼Œæˆ–è€…ç¬¬ä¸€ä¸ªå­—ç¬¦ä¸º"@"时当做HTML字符串
  589. €…第一个字符为"@"时当做HTML字符串
  590.                 if (expr.length !== length || c.crea.test(expr)) {
  591.                         var doc = root// HTMLå‰æ·»åŠ IMG,防止IE抛出异常
  592.                         div = doc.createElement('div'), list = [];
  593.                         // HTMLå‰æ·»åŠ IMG,防止IE抛出异常
  594.                         div.innerHTML = '<img id="__kindeditor_temp_tag__" width="0" height="0" style="display:none;" />' + expr;
  595.                         for (var i = 0, len = div.childNodes.length; i < len; i++) {
  596.                                 var child = div.childNodes[i];
  597.                         // selector
  598. d == '__kindeditor_temp_tag__') {
  599.                                         contin// KNode
  600.  
  601.                                 list.push(child);
  602.                         }
  603.                         return newNode(list);
  604.                 }
  605.                 // // jQuery object
  606.  newNode(_queryAll(expr, root));
  607.         }
  608.         // KNode
  609.         if // Native NodeList
  610. ructor === KNode) {
  611.                 return expr;
  612.         }
  613.         // jQuery ob// Native Node
  614. toArray) {
  615.                 expr = expr.toArray();
  616.         }
  617.         // Native NodeList
  618.         if (_isArray(expr)) {
  619.                 return newNode(expr);
  620.         }
  621.         // Native Node
  622.         return newN

Raw Paste


Login or Register to edit or fork this paste. It's free.