没有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 ...
随机推荐
- PHP生成器Generators
下文的第一个逐行读取文件例子用三种方式实现;普通方法,迭代器和生成器,比较了他们的优缺点,很好,可以引用到自己的代码中 ,支持的php版本(PHP 5 >= 5.5.0) 后面的yield讲解, ...
- PCIe 32GT/s 含义
如下: Jul 26 03:42:53 kernel: ixgbe 0000:01:00.1: PCI Express bandwidth of 32GT/s available Jul 26 03: ...
- Windows 2008 R2 Powershell 3.0
下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=34595&WT.mc_id=rss_alldownloads_all
- Java基础-super关键字与this关键字
用super调用父类构造方法 类如果没有显式声明构造方法,则自动生成无参数的默认构造方法. 1.先用一个无参数的父类构造方法验证一下, 执行子类构造方法会自动调用父类的构造方法.测试代码: class ...
- jquery实现输入框聚焦,键盘上下键选择城市
在最近有个项目中 需要实现当文本框聚焦的时候,可以键盘上下键选择内容,按enter键的时候,把内容传到输入框中,如图所示: 实现代码如下: /** *输入框聚焦,键盘上下键选择城市 */ ;(func ...
- 初探网络编程--TCP套接字编程演示
今天看了一下<计算机网络:自顶向下方法>,也就是计算机网络的教材的应用层一章,决定实现以下后面的Java C/S应用程序的例子,用来演示TCP和UDP套接字编程. 程序流程如下: 1.一台 ...
- 1.使用using释放资源
using语句有二个关键字 >>作为关键字,using可以导入命名空间 >>作为C#语句,using可以释放对象占用的内存资源 语法: using(SqlConnection ...
- 游戏/APP的多语言系统设计
多语言需求 游戏或者APP中可以根据不同地区显示不同语言,那么这是怎么实现的呢?要如何处理应用中的图片呢? 思路分析 系统设计 字体翻译显示 多语言收集工具 图例解释 把界面上出现的文字,翻译到多语言 ...
- 在公司内网上创建自己的 OSM.Planet 街道级别地图服务器及其客户端程序
转自我的BLOG http://blog.csdn.net/goldenhawking/article/details/6402775 最近经过陛下点拨,涉猎了“OpenStreetMap”,做了不 ...
- PHP的文件操作常用函数
PHP文件操作 1 获得文件名:basename - 返回路径中的文件名部分 给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被 ...