没有jquery的时候,你看看这个
vjs
var br = (function() {
var ua = navigator.userAgent.toLowerCase();
browser = {
iPhone: /iphone/.test(ua),
iPad: /ipad/.test(ua),
iPod: /ipod/.test(ua),
isLetv: /letv/.test(ua),
Android: /android/.test(ua),
AndroidPad: /android/.test(ua) && !/mobile/.test(ua),
atwin: /win/.test(ua),
opera: /opera/.test(ua),
msie: /msie/.test(ua),
firefox: /firefox/.test(ua),
safari: /safari/.test(ua) && !/chrome/.test(ua),
wph: /windows phone/.test(ua),
ps: /playstation/.test(ua),
uc: /ucbrowser|ucweb/.test(ua),
xiaomi: /xiaomi/.test(ua),
weixin: /MicroMessenger/i.test(ua),
isLetvTv: function() {
try {
return typeof LetvFish.getBrowserType == 'function';
} catch (e) {
return false;
}
}
};
var rwebkit = /(webkit)[ \/]([\w.]+)/,
ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
rmsie = /(msie) ([\w.]+)/,
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;
var match = rwebkit.exec(ua) ||
ropera.exec(ua) ||
rmsie.exec(ua) ||
ua.indexOf("compatible") < 0 && rmozilla.exec(ua) || [];
browser.version = match[2] || "0";
return browser;
})();
var $js = (function() {
var undefined, filter = [].filter,
slice = [].slice,
class2type = {},
classSelectorRE = /^\.([\w-]+)$/,
idSelectorRE = /^#([\w-]*)$/,
tagSelectorRE = /^[\w-]+$/;
var browser = br;
/**
* @desc vjs框架入口,实现DOM选择器
*
*/
vjs = function(selector, context) {
return new vjs.fn.init(selector, context);
}
vjs.isPC = false;
var qsa = function(element, selector) {
var found
try {
return (isDocument(element) && idSelectorRE.test(selector)) ?
((found = element.getElementById(RegExp.$1)) ? [found] : []) :
(element.nodeType !== 1 && element.nodeType !== 9) ? [] :
slice.call(
classSelectorRE.test(selector) ? (
element.getElementsByClassName ? element.getElementsByClassName(RegExp.$1) : qsc(element, RegExp.$1)) :
tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) :
element.querySelectorAll(selector)
)
} catch (e) {
return []
}
}
var Z = function(me, dom, selector) {
dom = dom || []
me.selector = selector || ''
me.length = dom.length
for (var i = 0, j = dom.length; i < j; i++) {
me[i] = dom[i];
}
return me
}
var isZ = function(object) {
return object instanceof Z
}
var qsc = function(parent, id) {
if (parent.getElementsByTagName) {
var el = parent.getElementsByTagName('*');
var pattern = new RegExp("(^|\\s)" + id + "(\\s|$)");
for (var i = 0, j = el.length; i < j; i++) {
if (pattern.test(el[i].className)) {
return [el[i]];
}
}
}
return [];
}
vjs.fn = {
init: function(selector, context) {
if (!selector) return Z(this);
else if (selector.nodeType) return Z(this, [selector])
else {
var dom
if (isArray(selector)) dom = compact(selector)
else if (context !== undefined) return vjs(context).find(selector)
else dom = qsa(document, selector)
return Z(this, dom, selector);
}
},
find: function(selector) {
var result, me = this;
if (typeof selector == 'object')
result = vjs(selector).filter(function() {
var node = this
return [].some.call(me, function(parent) {
return vjs.contains(parent, node)
})
})
else if (this.length == 1) result = vjs(qsa(this[0], selector))
else result = this.map(function() {
return qsa(this, selector)
})
return result
},
each: function(callback) {
if ([].every) {
[].every.call(this, function(el, idx) {
return callback.call(el, idx, el) !== false
});
} else {
for (var i = 0, len = this.length; i < len; i++) {
callback.call(this[i], i, this[i]);
}
}
return this
},
hasClass: function(name) {
var me = this[0];
return new RegExp('(\\s|^)' + name + '(\\s|$)').test(me.className);
},
addClass: function(name) {
var classNameArray = (name || '').split(/\s+/);
return this.each(function() {
var currClassName = this.className;
for (var i = 0, len = classNameArray.length; i < len; i++) {
if (!vjs(this).hasClass(classNameArray[i])) {
currClassName += ' ' + classNameArray[i];
}
}
this.className = currClassName;
});
},
removeClass: function(name) {
var classNameArray = (name || '').split(/\s+/);
return this.each(function() {
var currClassName = this.className;
for (var i = 0, len = classNameArray.length; i < len; i++) {
var reg = new RegExp('(\\s|^)' + classNameArray[i] + '(\\s|$)');
currClassName = currClassName.replace(reg, ' ');
}
this.className = vjs.trim(currClassName);
})
},
on: function(name, callback, context) {
return this.each(function(i, element) {
var evtDelagate = function(e) {
e.target = e.target || e.srcElement;
callback.call(context, e)
}
if (!element['domid']) element['domid'] = String(Math.random()).slice(-4);
var guid = name + '_' + element['domid'];
callback[guid] = evtDelagate;
if (element.addEventListener) {
element.addEventListener(name, evtDelagate, false);
} else if (element.attachEvent) {
element.attachEvent('on' + name, evtDelagate);
}
});
},
off: function(name, callback, context) {
return this.each(function(i, element) {
var guid = name + '_' + element['domid'],
fn = callback[guid] || callback;
if (element.removeEventListener) {
element.removeEventListener(name, fn, false);
} else if (element.detachEvent) {
element.detachEvent('on' + name, fn);
}
});
},
getStyle: function(styleName) {
var node = this[0];
if (browser.msie) {
switch (styleName) {
// 透明度
case "opacity":
return ((node.filters['DXImageTransform.Microsoft.Alpha'] ||
node.filters['alpha'] || {}).opacity ||
100);
// 浮动
case "float":
styleName = "styleFloat";
}
return node.style[styleName] ||
node.currentStyle ? node.currentStyle[styleName] : 0;
} else {
// 浮动
if (styleName == "float") {
styleName = "cssFloat";
}
return node.style[styleName] ||
(document.defaultView.getComputedStyle(node, "") ? document.defaultView.getComputedStyle(node, "")[styleName] : null) || 0;
}
},
setStyle: function(styleName, styleValue) {
return this.each(function() {
var node = this;
if (browser.msie) {
switch (styleName) {
case "opacity":
node.style.filter = "alpha(opacity=" + (styleValue * 100) + ")";
if (!node.currentStyle || !node.currentStyle.hasLayout) {
node.style.zoom = 1;
}
return;
case "float":
styleName = "styleFloat";
}
} else {
if (styleName == "float") {
styleName = "cssFloat";
}
}
node.style[styleName] = styleValue;
});
},
getAttr: function(name) {
var node = this[0];
return node.getAttribute(name);
},
setAttr: function(name, value) {
return this.each(function() {
var node = this;
node.setAttribute(name, value);
});
},
offset: function() {
var me = this[0];
var body = document.body,
box = me.getBoundingClientRect();
return {
top: box.top + (window.scrollY || body.parentNode.scrollTop || me.scrollTop) - (document.documentElement.clientTop || body.clientTop || 0),
left: box.left + (window.scrollX || body.parentNode.scrollLeft || me.scrollLeft) - (document.documentElement.clientLeft || body.clientLeft || 0)
};
},
width: function(num) {
if (typeof num == 'undefined') {
return this[0].offsetWidth;
}
this[0].style.width = parseFloat(num) + 'px';
},
height: function(num) {
if (typeof num == 'undefined') {
return this[0].offsetHeight;
}
this[0].style.height = parseFloat(num) + 'px';
},
map: function(fn) {
return vjs(vjs.map(this, function(el, i) {
return fn.call(el, i, el)
}))
}
}
vjs.fn.init.prototype = vjs.fn;
function type(obj) {
return obj == null ? String(obj) :
class2type[toString.call(obj)] || "object"
}
function isFunction(value) {
return type(value) == "function"
}
function isDocument(obj) {
return obj != null && (obj.nodeType == 9 || obj.nodeType == obj.DOCUMENT_NODE)
}
function isArray(value) {
return value instanceof Array
}
function likeArray(obj) {
return typeof obj.length == 'number'
}
function compact(array) {
return filter.call(array, function(item) {
return item != null
})
}
function className(node, value) {
var klass = node.className,
svg = klass && klass.baseVal !== undefined
if (value === undefined) return svg ? klass.baseVal : klass
svg ? (klass.baseVal = value) : (node.className = value)
}
function funcArg(context, arg, idx, payload) {
return isFunction(arg) ? arg.call(context, idx, payload) : arg
}
vjs.contains = function(parent, node) {
return parent !== node && parent.contains(node)
}
vjs.map = function(elements, callback) {
var value, values = [],
i, key
if (likeArray(elements))
for (i = 0; i < elements.length; i++) {
value = callback(elements[i], i)
if (value != null) values.push(value)
} else
for (key in elements) {
value = callback(elements[key], key)
if (value != null) values.push(value)
}
return values
}
vjs.each = function(elements, callback) {
var i, key
if (likeArray(elements)) {
for (i = 0; i < elements.length; i++)
if (callback.call(this, i, elements[i]) === false) return elements
} else {
for (key in elements)
if (callback.call(this, key, elements[key]) === false) return elements
}
return elements
}
vjs.trim = function(str) {
return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}
vjs.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
class2type["[object " + name + "]"] = name.toLowerCase()
});
vjs.extend = function(props) {
var init, subObj;
props = props || {};
init = props['init'] || props.init || this.prototype['init'] || this.prototype.init || function() {};
subObj = function() {
init.apply(this, arguments);
};
subObj.prototype = vjs.create(this.prototype);
subObj.prototype.constructor = subObj;
if (!props.__proto__) props.__proto__ = subObj.prototype;
subObj.extend = vjs.extend;
for (var name in props) {
if (props.hasOwnProperty(name)) {
subObj.prototype[name] = props[name];
}
}
return subObj;
}
vjs.create = function(obj) {
function F() {}
F.prototype = obj;
return new F();
};
vjs.getWinWH = function() {
var pagerWidth = window.innerWidth,
pagerHeight = window.innerHeight;
if (typeof pagerWidth != 'number') {
if (document.compatMode == 'CSS1Compat') {
pagerWidth = document.documentElement.clientWidth;
pagerHeight = document.documentElement.clientHeight;
} else {
pagerWidth = document.body.clientWidth;
pagerHeight = document.body.clientHeight;
}
}
return {
width: pagerWidth,
height: pagerHeight
}
}
vjs.safari = browser.safari;
return vjs;
})();
var emptyFn = function(){};
var lib = {
createElement: function(tagName, attributes) {
var el = document.createElement(tagName),
attrname;
for (attrname in attributes) {
if (attributes.hasOwnProperty(attrname)) {
if (attrname.indexOf("-") !== -1) {
el.setAttribute(attrname, attributes[attrname]);
} else {
el[attrname] = attributes[attrname];
}
}
}
return el;
},
removeElem: function(node) {
if (node) {
if (node.remove) {
return node.remove();
} else {
return node.parentNode && node.parentNode.removeChild && node.parentNode.removeChild(node);
}
}
},
el: function(p, n) {
var elem = n ? $js(p).find(n)[0] : $js(p)[0];
if (!elem) {
elem = {
"setAttribute": function() {},
"style": {},
"isnull": true
};
}
return elem;
},
//判断是否存在这个元素
existEl: function(el) {
if (typeof el === 'object') {
if (el.isnull) {
return false;
} else if (el instanceof Array) {
return el.length > 0;
} else {
return true;
}
} else if (typeof el === 'string') {
return arguments.callee(this.el(el));
}
return false;
},
now: Date.now || function() {
return +new Date();
},
merge: function(obj1, obj2, safe) {
if (!obj2) {
obj2 = {};
};
for (var attrname in obj2) {
if (obj2.hasOwnProperty(attrname) && (!safe || !obj1.hasOwnProperty(attrname))) {
obj1[attrname] = obj2[attrname];
}
}
return obj1;
},
wsLog: function(data) {},
debug: function(msg, prefix, line) {
line = line || " ";
if (H5AD.config.DEBUG == true || adTools.getQuery("arkdebug")) {
if (typeof msg == 'object') {
if (prefix) {
console.log("%c" + prefix, "color:#f0d");
this.wsLog(prefix);
}
this.wsLog(msg);
console.log(msg);
} else {
if (msg == undefined) {
console.log("数据空" + line)
return;
}
this.wsLog(msg);
console.log(msg + line);
}
}
},
json: function(data) {
try {
if (typeof data === "string") {
if (JSON && JSON.parse) {
return JSON.parse(data);
}
return eval("(" + data + ")");
}
//谨慎使用
return JSON.stringify(data);
} catch (ex) {
return 'error';
}
},
// 对象浅复制
easyClone: function(raw, target) {
for (var prop in target) {
if (target.hasOwnProperty(prop) && typeof target[prop] !== 'object') {
raw[prop] = target[prop];
}
}
},
getJSON: function(param) {
var url = param.url,
data = param.data,
success = param.success,
fail = param.fail,
callback = param.callback || 'callback',
timeout = param.timeout || 5000,
maxCount = param.maxCount || 2;
var jsonpCallback,
count = -1,
delayID = 0,
s,
self = this,
head = document.head || document.getElementsByTagName('head')[0] || document.documentElement;
var tmp = [];
if(data) for(var k in data) tmp.push(k + '=' + data[k]);
if(!/\?/.test(url)){
url += '?' + tmp.join('&');
}else{
url += '&' + tmp.join('&');
}
var addCb = function(){
var time = self.now(),
jsonpCallback = 'vjs_' + time + Math.floor(Math.random()*100);
window[jsonpCallback] = function(response) {
destroy();
success.call(this, response,{responseTime: self.now()-time, retryCount: count});
window[jsonpCallback] = null;
};
return jsonpCallback;
};
var destroy = function(){
if(window[jsonpCallback]) window[jsonpCallback] = emptyFn;
clearTimeout(delayID);
if (s && s.parentNode) {
head.removeChild(s);
s.onload = s.onreadystatechange = null;
s = undefined;
}
};
var load = function() {
destroy();
count++;
if (count >= maxCount){
fail && fail.call(this);
return;
}
jsonpCallback = addCb();
var jsonpUrl = url;
if(/(\=)\?(&|$)/i.test(jsonpUrl)){
jsonpUrl = jsonpUrl.replace(/(\=)\?(&|$)/i,'$1' + jsonpCallback + '$2');
}else{
jsonpUrl += '&' + callback + '=' + jsonpCallback+'&j='+jsonpCallback;
}
if(param.log) param.log.pushLog('lib getJSON===' + jsonpUrl + '===' + jsonpCallback + '====' + count);
s = document.createElement('script');
s.setAttribute('type', 'text/javascript');
s.setAttribute('src', jsonpUrl);
head.insertBefore(s, head.firstChild);
delayID = setTimeout(load, timeout);
};
load();
return {
destroy : destroy
}
}
};
/**
//以下对lib的使用
var url = "http://localhost:3000/reso";
lib.getJSON({url:url,success:function(data){
alert("nihao");
}});
//lib createElement的使用
var src = "http://i3.letvimg.com/lc06_iscms/201611/09/23/49/7c2767be74d145a4b9e6eb8f648e46a0.jpg";
var img = lib.createElement('img', {
src: src
});
$js(img).on('load', function() {
img = null;
});
*/
//
lib.existEl("box");//这个函数
没有jquery的时候,你看看这个的更多相关文章
- Angular杂谈系列1-如何在Angular2中使用jQuery及其插件
jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...
- jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧
这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...
- Jquery的点击事件,三句代码完成全选事件
先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- jQuery实践-网页版2048小游戏
▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...
- jquery和Js的区别和基础操作
jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...
- jQuery之ajax实现篇
jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧. 实现功能 由于jq中的ajax方法是用了内置的deferred模块,是P ...
- 利用snowfall.jquery.js实现爱心满屏飞
小颖在上一篇一步一步教你用CSS画爱心中已经分享一种画爱心的方法,这次再分享一种方法用css画爱心,并利用snowfall.jquery.js实现爱心满屏飞的效果. 第一步: 利用伪元素before和 ...
- jQuery的61种选择器
The Write Less , Do More ! jQuery选择器 1. #id : 根据给定的ID匹配一个元素 <p id="myId">这是第一个p标签< ...
- jquery.uploadify文件上传组件
1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...
- 浅谈 jQuery 核心架构设计
jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...
随机推荐
- oracle常用命令集合
一. 表空间相关命令 创建数据表空间 create SMALLFILE tablespace dataSpace datafile 'E:\oracle\product\10.2.0\oradata\ ...
- 烂泥:linux文件同步之rsync学习(一)
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天刚好有空就打算开始学习linux下的文件同步软件rsync,在学习rsync时,我们可以分以下几个步骤进行: 1. rsync是什么 2. rsy ...
- Swift内存管理、weak和unowned以及两者区别
Swift 是自动管理内存的,这也就是说,我们不再需要操心内存的申请和分配.当我们通过初始化创建一个对象时,Swift 会替我们管理和分配内存.而释放的原则遵循了自动引用计数 (ARC) 的规则:当一 ...
- 搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)
一.环境准备: 1.JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.Jmeter:http://jme ...
- VBA宏 合并EXCEL
1.合并多个Excel工作簿 Sub MergeWorkbooks() Dim FileSet Dim i As Integer Application.ScreenUpdating = False ...
- 《C陷阱与缺陷》之1词法"陷阱"
编译器中负责将程序分解为一个一个符号的部分,一般称为"词法分析器".在C语言中,符号之间的空白(包括空格符.制表符或换行符)将被忽略. 1.=不同于== C语言使用符号" ...
- 设置输入域(input/textarea)中文本光标的位置
以前记录了一篇 将光标定位于输入框最右侧的实现方式 ,实现光标定位在文本的最末.这种需求往往在修改现有的文本.有时可能还需要把光标定位在首位,或者中间某个位置,这就需要实现一个更通用的方法. 这个方法 ...
- 景瑞地产商业智能BI整体实施过程
1.1行业背景 1.1.1景瑞地产 景瑞地产成立于1993年,专注于房地产开发,并一直秉持“永远诚信.恪守专业.锐意进取.共赢未来”的核心价值观和“舒适之道”的企业使命. 景瑞地产,源自上海.通过多年 ...
- 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- 北理工c语言期末考试
1 给定一个区间,输出其中前半部分数字之和等于后半部分数字之和的数,没有则输出No output.(15分) 题目内容: 给定一个区间,输出其中前半部分数字之和等于后半部分数字之和的数,没有则输出No ...