自己根据js的兼容封装了一个小小的js库
var gys = function () { }
//oParent父节点
//获取所有的子元素
gys.prototype.getElementChildren = function (oParent) {
return oParent.children;
}
//arr获取的数组,jsonCss是修改属性css的json数据
// gys.setElementCss(aLi, {"color":"red","backgroundColor":"yellow","backgroundImage":"url(../img/test.jpg)"});
//设置元素的css
gys.prototype.setElementCss = function (arr, jsonCss) {
var length = arr.length;
if (length == 0) return; //没有元素
else if (!length) { //单个元素
for (var key in jsonCss) {
arr.style[key] = jsonCss[key];
}
}
else { //元素集合
for (var i = 0; i < arr.length; i++) {
for (var key in jsonCss) {
arr[i].style[key] = jsonCss[key];
}
}
}
}
//获取第一个子元素
gys.prototype.getElementFirstChildren = function (oParent) {
if (oParent.firstElementChild)//高版本浏览器,
{
return oParent.firstElementChild;
}
else //IE6,7,8
return oParent.firstChild;
}
//获取最后一个子元素
gys.prototype.getElementLastChildren = function (oParent) {
if (oParent.lastElementChild)//高版本浏览器,
{
return oParent.lastElementChild;
}
else //IE6,7,8
return oParent.lastChild;
}
//获取下一个元素
gys.prototype.getElementNext = function (element) {
if (element.nextElementSibling) { //高版本浏览器
return element.nextElementSibling;
}
else { //IE6,7,8
return element.nextSibling;
}
}
//获取上一个元素
gys.prototype.getElementPrev = function (element) {
if (element.previousElementSibling) {
return element.previousElementSibling
}
else {
return element.previousSibling;
}
} //ajax
/*
gys.ajax({ type: "get", url: "gps.txt", success: function (data) {
alert("成功" + data);
}, error: function (data) {
alert(data);
}
});
*/
gys.prototype.ajax = function (json) {
//1.创建服务器
var oAjax = null;
if (window.XMLHttpRequest) {
oAjax = new XMLHttpRequest();
}
else { //IE6
oAjax = new ActiveXObject("Microsoft.XMLHTTP");
}
/*2.连接服务器
open(方法,文件名,异步传输);
*/
//oAjax.open("GET", "gys.txt?=" + new Date().getTime(), true); //这里的date是为了去除缓存
oAjax.open(json.type.toUpperCase(), json.url, true);
//3.发送请求
oAjax.send();
//4.接受返回
oAjax.onreadystatechange = function () {
/*
oAjax.readyState:浏览器和服务器交互经行到哪一步了
0:未初始化.还没有调用open()方法.
1:载入.已调用send()方法,正在发送请求
2:载入完成.send()方法完成,已收到全部响应内容,这个时候的数据是可能没法使用,因为这个数据是加密过的,也有可能是为了节省带宽,进行压缩过的.
3:解析.正在解析相应内容
4:完成.响应内容解析完成,可以在客户端调用了.
*/
if (oAjax.readyState == 4) {//读取完成(并不代表成功)
if (oAjax.status == 200) { //成功
//alert("成功" + oAjax.responseText);
json.success(oAjax.responseText);
}
else {
//alert("失败");
//json.error(oAjax.responseText);
if (json.error) {
json.error("错误:"+oAjax.status);
}
}
}
}
} //获取浏览器窗口位置
gys.prototype.getScreenPos = function () {
/*
IE,Safari,Opera,Chrome提供screenLeft和screenTop
Safari,Chrome,Firefox支持screenX和screenY(Opera对这个属性支持有差异)
*/
var left = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX;
var top = (typeof window.screenTop == "number") ? window.screenTop : window.screenY;
return { left: left, top: top };
}
gys.prototype.addHandler = function (element, type, handler) {//注册事件
if (element.addEventListener) {//非IE
element.addEventListener(type, handler, false);
}
else if (element.attachEvent) {//IE
element.attachEvent("on" + type, handler);
}
else {//dom0级
element["on" + type] = handler;
}
}
gys.prototype.removeHandler = function (element, type, handler) { //取消注册事件
if (element.removeEventListener) {//非IE
element.removeEventListener(type, handler, false);
}
else if (element.detachEvent) {//IE
element.detachEvent("on" + type, handler);
}
else {//dom0级
element["on" + type] = null;
}
}
gys.prototype.getEvent=function (event) {//返回event的引用
return event ? event : window.event;
}
gys.prototype.getTarget=function (event) {//返回鼠标单击的目标对象
return event.target || event.srcElement;
}
gys.prototype.preventDefault=function (event) {//取消默认事件(a的href,radio,checkbox,)
if (event.preventDefault) {
event.preventDefault();
}
else {
event.returnValue = false;
}
}
gys.prototype.stopPropagation= function (event) {//因为这个EventUtil只支持冒泡,不支持事件捕获,所以这个方法只能阻止冒泡
if (event.stopPrapagation) {
event.stopPropagation();
}
else {
event.cancelBubble = true;
}
}
gys.prototype.getRelatedTarget=function (event) {//获取相关元素
/*
页面中有一个div;当鼠标离开这个div时,事件的主目标是div,而相关元素是body.
mouseover:事件的主目标是获得光标的元素,而相关元素就是那个失去光标的元素.
mouseout:事件的主目标是失去光标的元素,而相关元素使获得光标的那个元素.
*/
if (event.relatedTarget) { return event.relatedTarget; }
else if (event.toElement) { return event.toElement; }
else if (event.fromElement) { return event.fromElement; }
else { return null; }
}
gys.prototype.getButton= function (event) {//获取鼠标按钮的点击方式
if (document.implementation.hasFeature("MouseEvents", "2.0")) { return event.button; }
else {
switch (event.button) {
case 0:
case 1:
case 3:
case 5:
case 7:
return 0; //左击
case 2:
case 6:
return 2; //中间键
case 4:
return 1; //右击
}
}
}
gys = new gys();
自己根据js的兼容封装了一个小小的js库的更多相关文章
- 自己封装的一个原生JS拖动方法。
代码: function drag(t,p){ var point = p || null, target = t || null, resultX = 0, resultY = 0; (!point ...
- vue.js+web storm安装及第一个vue.js
小白还是自己写一遍吧 1.下载node.js https://nodejs.org/en/download/ 2.安装淘宝镜像(类似于阿里云的maven中央仓库镜像) 安装时间有点长 安装命令:npm ...
- JS类的封装及实现代码
js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类. 1. ...
- 使用原生JS实现一个风箱式的demo,并封装了一个运动框架
声明,该DEMO依托于某个培训机构中,非常感谢这个培训结构.话不多说,现在开始改demo的制作. 首先,在前端的学习过程中,轮播图是我们一定要学习的,所以为了更加高效的实现各种轮播图,封装了一个运动的 ...
- 自己封装的一个JS分享组件
因为工作的需求之前也封装过一个JS分享插件,集成了我们公司常用的几个分享平台. 但是总感觉之前的结构上很不理想,样式,行为揉成一起,心里想的做的完美,实际上总是很多的偏差,所以这次我对其进行了改版. ...
- 自己封装的一个js方法用于获取显示的星期和日期时间
自己封装的一个js方法用于获取显示的星期和日期时间 /** * 获取用于显示的星期和日期时间 * @param date * @returns {string} */ function getWeek ...
- 自己封装一个弹窗JS
在我们平时的开发中,一定有很多地方需要用到弹窗提示功能.而系统自带的弹窗奇丑无比,而且我们不能自主控制.因此我们在开发过程中,自己封装一个弹窗JS方便我们使用. 代码demo如下: // JavaSc ...
- 一个基于 EasyUI 的前台架构(3)封装操作Tabs的JS代码
一般来说,系统框架的主内容区会引入另一个独立的 Web 页面来实现系统的功能,所以在在 Tabs 里的每一个标签页里使用 iframe 标签来引入子页面.所以这里可以将 Tabs 的 Content ...
- 【原创】使用JS封装的一个小型游戏引擎及源码分享
1 /** * @description: 引擎的设计与实现 * @user: xiugang * @time: 2018/10/01 */ /* * V1.0: 引擎实现的基本模块思路 * 1.创建 ...
随机推荐
- Femtocell家庭基站通信截获、伪造任意短信漏洞
阿里移动安全团队与中国泰尔实验室无线技术部的通信专家们一起,联合对国内运营商某型Femtocell基站进行了安全分析,发现多枚重大漏洞,可导致用户的短信.通话.数据流量被窃听.恶意攻击者可以在免费申领 ...
- OC基础:OC 基本数据类型与对象之间的转换方法 分类: ios学习 OC 2015-06-18 20:01 11人阅读 评论(0) 收藏
1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...
- suggest parentheses around comparison in operand of &|
error discription: .:: warning: suggest parentheses around comparison in operand of ‘&’ [-Wparen ...
- 有锁Iphone 3GS 6.0.1 降级刷到4.2.1 完美越狱+解锁
2012-12-20 百度空间所写 前言:由于之前的3GS升级到6.0.1后会有重启之后无法打电话的情况,同学觉得这样很烦,搞得手机不像个手机了.但是这也是没办法的,毕竟是不完美越狱加软解锁的.于是, ...
- 用C实现FFT算法
用C语言编写FFT算法 转http://blog.sina.com.cn/s/blog_65d639d50101buo1.html #include "math.h" #defi ...
- hive 数据导出三种方式
今天我们再谈谈Hive中的三种不同的数据导出方式.根据导出的地方不一样,将这些方式分为三种:(1).导出到本地文件系统:(2).导出到HDFS中:(3).导出到Hive的另一个表中.为了避免单纯的文字 ...
- hasura graphql-engine v1.0.0-alpha26 版本新功能
hasura 发布了graphql-engine v1.0.0-alpha26 版本,有一些破坏的变动,以及方便的新特性 破坏性变动 order_by 从 order_by: id_asc 为 ord ...
- benthos stream nats 集成试用
测试demo 来自官方例子 使用docker-compose 进行运行 nats docker-compose file version: '3.3' services: nats: image: n ...
- System帐户!我使用你登陆
大家知道,SYSTEM是至高无上的超级管理员帐户.默认情况下,我们无法直接在登录对话框上以SYSTEM帐户的身份登录到Windows桌面环境.实际上SYSTEM帐户早就已经“盘踞”在系统中了.想想也是 ...
- Jenkins系列之Jenkins的安装
我们在进行自动化测试的时候通常我们都会进行持续集成,可以帮助我们持续集成的工具有很多,我个人比较喜欢用Jenkins. 主要是因为它有如下优点: 开源免费 跨平台,支持所有的平台 web形式的可视化的 ...