//用 class 获取元素
function getElementsByClass(className,context) {
context = context || document;
if(document.getElementsByClassName) {
return context.getElementsByClassName(className);
}
else {
var i;
var arr = [];
var elements = context.getElementsByTagName("*");
for (i in elements) {
if(hasClass(className,elements[i])) {
arr.push(elements[i]);
}
}
return arr;
}
} //判断一个元素有没有给定的class
function hasClass(className,ele) {
if(!ele.className) {//如果元素根本没有class,退出.
return false;
}
var classNames = ele.className.split(/\s+/);
for (var i = 0; i < classNames.length; i++) {
if(className === classNames[i]) {
return true;
}
}
} //通过属性名查找元素
function getElementsByAttr(attr,context) {
var elements;
var match = []; if(document.all) {
elements = context.all;
}
else {
elements = context.getElementsByTagName("*");
} attr = attr.replace(/\[|\]/g,"");//去掉中括号 if(attr.indexOf("=") == -1) {//没有等于号的情况
for (var i = 0; i < elements.length; i++) {
if(elements[i].getAttribute(attr)) {
match.push(elements[i]);
}
}
}
else {//有等于号的情况
attrArr = attr.split("=");
for (var j = 0; j < elements.length; j++) {
if(elements[j].getAttribute(attrArr[0]) === attrArr[1]) {
match.push(elements[j]);
}
}
} return match;
} //转换为数组
function convertToArray(nodes) {
var array;
try {
array = Array.prototype.slice.call(nodes,0);
} catch (ex) {
array = [];
for(var i in nodes) {
array.push(nodes[i]);
}
}
return array;
} //后一个兄弟元素
function nextSibling(node) {
var tempLast = node.parentNode.lastChild;
if (node == tempLast) return null;
var tempObj = node.nextSibling;
while (tempObj.nodeType != 1 && tempObj.nextSibling != null) {
tempObj = tempObj.nextSibling;
}
return (tempObj.nodeType==1)? tempObj:null;
} //前一个兄弟元素
function prevSibling(node) {
var tempFirst = node.parentNode.firstChild;
if (node == tempFirst) return null;
var tempObj = node.previousSibling;
while (tempObj.nodeType != 1 && tempObj.previousSibling != null) {
tempObj = tempObj.previousSibling;
}
return (tempObj.nodeType==1)? tempObj:null;
} //定义取消冒泡事件函数
function cancelBubble(e) {
var evt = e ? e : window.event;
if (evt.stopPropagation) {
//W3C
evt.stopPropagation();
}
else {
//IE
evt.cancelBubble = true;
}
} //判断一个变量是不是数组
function isArray(arr) {
return Object.prototype.toString.call(arr) ==="[object Array]";
} // 判断fn是否为一个函数,返回一个bool值
function isFunction(fn) {
return Object.prototype.toString.call(fn) ==="[object Function]";
} //得到一个元素的子元素.
function getChildNodes(node){
var child = node.childNodes; function convertToArray(nodes) {
var array;
try {
array = Array.prototype.slice.call(nodes,0);
} catch (ex) {
array = [];
for(var i in nodes) {
array.push(nodes[i]);
}
}
return array;
} child = convertToArray(child);
var arr = [];
for(var i in child) {
if(child[i].nodeType === 1) {
arr.push(child[i]);
}
}
return arr;
} // var arr2 = [].concat(arr1);
// var arr3 = arr1.slice(0);
// var arr1 = [1,3,5,"dog",{name:"wang",age:5}]; // 使用递归来实现一个深度克隆,可以复制一个目标对象,返回一个完整拷贝
// 被复制的对象类型会被限制为数字、字符串、布尔、日期、数组、Object对象。不会包含函数、正则对象等
function clone(obj) {
var newObj = (obj.constructor === Object) ? {} : [];
if(window.JSON){
var temp = JSON.stringify(obj);
newObj = JSON.parse(temp);
}
else {
for(var key in obj) {
if(obj.hasOwnProperty(key)){
newObj[key] = (typeof obj[key] === "object") ? clone(obj[key]) : obj[key];
}
}
} return newObj;
} // 对数组进行去重操作,只考虑数组中元素为数字或字符串,返回一个去重后的数组
function uniqArray(arr) {
var temp = [];
if(arr[0]){
temp.push(arr[0]);
}
outer: for (var i = 1; i < arr.length; i++) {
for(var j in temp){
if(arr[i] === temp[j]){
continue outer;
}
}
temp.push(arr[i]);
}; return temp;
} // var arr1 = [1,2,3,4,2,5,3,6,1,5,6,7,87]; // 实现一个简单的trim函数,用于去除一个字符串,头部和尾部的空白字符
// 假定空白字符只有半角空格、Tab
// 练习通过循环,以及字符串的一些基本方法,分别扫描字符串str头部和尾部是否有连续的空白字符,并且删掉他们,最后返回一个完成去除的字符串
function simpleTrim(str) {
var temp = "";
for(var i = 0;i < str.length; i++) { if(
//自己有值且不是空格,复制
(str.charAt(i) && str.charAt(i) != " ")
//自己是空格,且上一位和下一位都不是空格,复制
|| (str.charAt(i) === " "
&& (str.charAt(i + 1) && str.charAt(i + 1) != " ")
)
)
{
temp += str.charAt(i);
}
}
//如果第0位是空格,就返回第1位及以后的字符,否则返回整个字符串
return temp = (temp.charAt(0) === " ")? temp.slice(1) : temp;
}
// var str = " hello world hello world hello world hello world";
// simpleTrim(str); // 对字符串头尾进行空格字符的去除、包括全角半角空格、Tab等,返回一个字符串
// 尝试使用一行简洁的正则表达式完成该题目
function trim(str) {
str = str.replace(/^\s*|\s*$/g, "");//删除首尾空格
return str = str.replace(/\s+/g, " ");//删除中间多余空格
} // 实现一个遍历数组的方法,针对数组中每一个元素执行fn函数,并将数组索引和元素作为参数传递
function each(arr, fn) {
for (var i = 0,len = arr.length; i < len; i++) {
fn(arr[i],i);
};
}
function say(value,index) {
if(arguments.length === 1) {
console.log(value);
}
else if(arguments.length === 2) {
console.log(index + ": " + value);
}
} // 获取一个对象里面第一层元素的数量,返回一个整数
function getObjectLength(obj) {
var index = 0;
for(var i in obj){
index ++;
}
return index;
} // var obj = {
// a: 1,
// b: 2,
// c: {
// c1: 3,
// c2: 4
// }
// };
// console.log(getObjectLength(obj)); // 3 // 判断是否为邮箱地址
function isEmail(emailStr) {
//邮箱以数字或字母开头,包含字母 数字 下划线 短横线
var mailReg = /^[A-Za-z0-9][A-Za-z0-9_-]+@[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)+$/;
return mailReg.test(amailStr);
} // 判断是否为手机号
function isMobilePhone(phone) {
// 手机号11位,纯数字.可能会有国家编号
var phoneReg = /^(\+(\d){2})?1\d{10}$/;
return phoneReg.test(phone);
} // 3 DOM // 为element增加一个样式名为newClassName的新样式
function addClass(element, newClassName) {
if(newClassName){
if(element.className === "") {
element.className = newClassName;
}
else {
element.className += " " + newClassName;
}
}
} // 移除element中的样式oldClassName
function removeClass(element, oldClassName) {
if(oldClassName){
var removeClassName = new RegExp(oldClassName);
element.className = element.className.replace(removeClassName,"");
}
} // 判断siblingNode和element是否为同一个父元素下的同一级的元素,返回bool值
function isSiblingNode(element, siblingNode) {
return element.parentNode === siblingNode.parentNode;
} // 获取element相对于浏览器窗口的位置,返回一个对象{x, y}
function getViewPosition1(element) {
var position = {};
function getLeft() {
var left = element.offsetLeft;
var current = element.offsetParent;
while(current !== null){
left += current.offsetLeft;
current = current.offsetParent;
}
return left;
}
function getTop(){
var top = element.offsetTop;
var current = element.offsetParent;
while(current !== null) {
top += current.offsetTop;
current = current.offsetParent;
}
return top;
}
var elementScrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
var elementScrollTop = document.documentElement.scrollTop || document.body.scrollTop;
position.x = getLeft() - elementScrollLeft;
position.y = getTop() - elementScrollTop; return position; }
//获取element 相对窗口位置的另一种快捷方法
function getViewPosition2(element) {
var position = {}; position.x = element.getBoundingClientRect().left;
position.y = element.getBoundingClientRect().top; return position;
}
//获取元素绝对位置
function getElePosition(element) {
var position = {};
position.x = element.getBoundingClientRect().left + getScrollLeft();
position.y = element.getBoundingClientRect().top + getScrollTop(); return position;
} //滚动条高度
function getScrollTop(){
return document.documentElement.scrollTop || document.body.scrollTop;
}
//滚动条宽度
function getScrollLeft(){
return document.documentElement.scrollLeft || document.body.scrollLeft;
} //鼠标绝对位置
function getPointerLocation(event){
event = event || window.event;
var position = {};
position.X = event.pageX || event.clientX + getScrollLeft();
position.Y = event.pageY || event.clientY + getScrollTop();
return position;
} //得到窗口大小
function getViewport(){
if (document.compatMode === "BackCompat"){
return {
width: document.body.clientWidth,
height: document.body.clientHeight
}
} else {
return {
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight
}
}
} // 实现一个简单的Query
function $(selector,context) {
var element = [];
current = context || document; function query(ele,current) {
var firstLetter = ele.charAt(0);
switch (firstLetter) {
case "#": return current.getElementById(ele.slice(1));
break;
case ".": return getElementsByClass(ele.slice(1),current);
break;
case "[": return getElementsByAttr(ele,current);
break;
default : return current.getElementsByTagName(ele);
break; }
} //因为参数之间的分割是空格,没有逗号,所以 arguments 的长度是1
//这一步把参数用空格分割开
var arg = selector.split(/\s+/);
//console.log(arg); for (var i = 0; i < arg.length; i++) {
if(i == 0) {
//把结果保存在数组里.
//getElementsByClassName() getElementsByTagName() 返回的是类数组的对象,但不是数组.不能直接运用数组方法.需要类型转换
if(arg[i][0] == "#") {
element = element.concat(query(arg[i],current));
}
else {
element = element.concat(convertToArray(query(arg[i],current)));
}
}
else {
var temp = [];
var result = [];
for(var j in element) {
// current = element[j];
temp = convertToArray(query(arg[i],element[j]));
if(temp.length) {
result = result.concat(convertToArray(temp));
}
}
element = result;
result = [];
}
}
//如果输入的选择器中最后一个是 id ,就输出第一个元素.因为 id 唯一.
if(arg[arg.length-1][0] == "#") {
return element[0];
}
else {
return element;
}
} // 可以通过id获取DOM对象,通过#标示,例如
// $("#adom"); // 返回id为adom的DOM对象 // 可以通过tagName获取DOM对象,例如
// $("a"); // 返回第一个<a>对象 // 可以通过样式名称获取DOM对象,例如
// $(".classa"); // 返回第一个样式定义包含classa的对象 // 可以通过attribute匹配获取DOM对象,例如
// $("[data-log]"); // 返回第一个包含属性data-log的对象 // $("[data-time=2015]"); // 返回第一个包含属性data-time且值为2015的对象 // 可以通过简单的组合提高查询便利性,例如
// $("#adom .classa"); // 返回id为adom的DOM所包含的所有子节点中,第一个样式定义包含classa的对象 // 4 事件 // 给一个element绑定一个针对event事件的响应,响应函数为listener
function addListener(element, type, listener) {
if(element.addEventListener) {
element.addEventListener(type,listener,false);
}
else if(element.attachEvent) {
element.attachEvent("on" + type,listener);
}
else {
element["on" + type] = listener;
}
} // 移除element对象对于event事件发生时执行listener的响应
function removeListener(element, type, listener) {
if(element.removeEventListener) {
element.removeEventListener(type,listener,false);
}
else if(element.detachEvent) {
element.detachEvent("on" + type,listener);
}
else {
element["on" + type] = null;
}
} // 实现对click事件的绑定
function addClickEvent(element, listener) {
addEvent(element,click,listener);
} // 实现对于按Enter键时的事件绑定
function addEnterListener(element, listener) {
element.onkeydown = function(event) {
var event = event || window.event;
if(event && event.keyCode === 13) {
addEvent(element,type,listener);
}
}
} // 事件代理, 基于addListener
function delegateEvent(element, tag, type, listener) { function getEventTarget(e) {
e = e || window.event;
return e.target || e.srcElement;
} function eventFn(type) {
var target = getEventTarget(event);
if(target && target.tagName.toLowerCase() === tag) {
listener();
}
} addListener(element,type,eventFn);
} //将函数封装为以下形式
var Event = {};
//事件绑定
Event.on = function(selector, event, listener) {
var element = $(selector);//调用$()
if(element.addEventListener) {
element.addEventListener(event,listener,false);
}
else if(element.attachEvent) {
var ieEvent = "on" + event;
element.attachEvent(ieEvent,listener);
}
}
//点击事件
Event.click = function(selector, listener) {
Event.on(selector,click,listener);//调用Event.on()
}
//解除事件绑定
Event.un = function(selector, event, listener) {
var element = $(selector);
if(element.removeEventListener) {
element.removeEventListener(event,listener,false);
}
else if(element.detachEvent) {
var ieEvent = "on" + event;
element.detachEvent(ieEvent,listener);
}
}
//事件代理
Event.delegate = function(selector, tag, event, listener) {
var element = $(selector); function getEventTarget(e) {
var e = e || window.event;
return e.target || e.srcElement;
} function eventFn(e) {
var target = getEventTarget(e);
if(target.tagName.toLowerCase() === tag) {
listener();
}
}
addEvent(element, event, eventFn);
} // 使用示例:
// $.click("[data-log]", logListener);
// $.delegate('#list', "li", "click", liClicker); // 5 BOM // 判断是否为IE浏览器,返回-1或者版本号
function isIE() {
return !-[1,];
} // 设置cookie
function setCookie(cookieName, cookieValue, expiredays) {
var d = new Date();
d.setDate(d.getDate() + expiredays);
var cookieText = encodeURIComponent(cookieName)
+ "="
+ encodeURIComponent(cookieValue); if (expiredays) {
cookieText += "; expires=" + expiredays.toGMTString();
} document.cookie = cookieText;
} // 获取cookie值
function getCookie(cookieName) {
var arrCookie = document.cookie.split(";");
for (var i = 0; i < arrCookie.length; i++) {
var _arr = arrCookie[i].split("=");
if(_arr[0] === cookieName) {
return _arr[1];
}
}
else {
return null;
}
} // 6 Ajax function ajax(url, options) {
var xhr = window.XMLHttpRequest
? new XMLHttpRequest()
: new ActiveXObject('Microsoft.XMLHTTP');
var type = options.type ? options.type : "get";
var afterHandleData = handleData(options.data); if(type === "get"){
url = url + "?" + afterHandleData;
xhr.open(type,url,true);
xhr.onreadystatechange = ready;
xhr.send(null);
}
else if(type === "open") {
xhr.open(type,url,true);
xhr.onreadystatechange = ready;
xhr.send(afterHandleData);
} function ready() {
if(xhr.readyState === 4) {
if(xhr.status === 200) {
options.onsuccess();
}
else {
options.onfail();
}
}
} function handleData(data) {
var temp = "";
var key; for(key in data) {
temp += "&" + key + "=" + data[key];
} //删掉第一个 &
if(temp.charAt(0) === "&"){
temp = temp.slice(1);
} return temp;
}
} // 使用示例:
/*ajax(
'http://localhost:8080/server/ajaxtest',
{
data: {
name: 'simon',
password: '123456'
},
onsuccess: function (responseText, xhr) {
console.log(responseText);
}
}
)*/ // options是一个对象,里面可以包括的参数为: // type: post或者get,可以有一个默认值
// data: 发送的数据,为一个键值对象或者为一个用&连接的赋值字符串
// onsuccess: 成功时的调用函数
// onfail: 失败时的调用函数 如何阻止事件冒泡和默认事件
function stopBubble(e)
{
if (e && e.stopPropagation){
e.stopPropagation()
}else{   window.event.cancelBubble=true
}
return false

  

封装的一些常见的JS DOM操作和数据处理的函数.的更多相关文章

  1. 常见的js dom操作

    1.查找  document.getElementById('id属性值');  返回拥有指定id的第一个对象的引用  document/element.getElementsByClassName( ...

  2. JS DOM操作(创建、遍历、获取、操作、删除节点)

    创建节点 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="u ...

  3. js dom 操作

    JS的DOM操作   1DOM是文档对象模型,这种模型为树模型:文档是指标签文档,对象是指文档中每个元素:模型是指抽象化的东西. 2间隔与延迟间隔执行一段代码(函数):window.setInterv ...

  4. JS—DOM操作

    节点分为三类: 1.元素节点:标签<div></div> 2.文本节点:标签内的纯文本. 3.属性节点:标签内的属性,id或class 查找元素: getElementById ...

  5. js——DOM操作(一)

    DOM:Document Object Model  文档对象模型 文档:html页面 文档对象:页面中元素 文档对象模型:定义  为了能够让程序(js)去操作页面中的元素 DOM会把文档看作是一棵树 ...

  6. JS DOM操作 函数 事件 阻止事件冒泡

    一 函数 1.字符串函数 s.tolowerCase( ):    -- 变小写 s.toupperCase( ):   -- 变大写 s.substr( 2 , 8 ):     -- 截取     ...

  7. JS DOM操作(五) Window.docunment对象——操作元素

    定位: var a = document.getElementByIt( "id" ) 同辈元素 var b = a.nextSibling;            -- 找 a ...

  8. JS DOM操作(二) Window.docunment对象——操作样式

    一 对元素的定位 在 js 中可以利用 id.class.name.标签名进行元素的定位 id.class  用在客户端 name  用在服务端 用 id 定位                  -- ...

  9. JS DOM操作(一) 对页面的操作

    DOM ——文档对象模型(Document Object Model)是表示和处理一个HTML或XML文档的常用方法. 在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标 ...

随机推荐

  1. chrome 跨域设置-(完善博客内容)

    目的完善自己的一套 ajax前端开发流程,在网上扒了一份成功的案例. 出于一些原因往往需要将浏览器设置成支持跨域的模式,好在chrome浏览器就是支持可跨域的设置,网上也有很多chrome跨域设置教程 ...

  2. js angular 时间戳转换成日期格式 年月日 yyyy-MM-dd

    昨天写项目,要把时间戳转换成日期格式发给后端 我就去网上找 看到的一些都不是我想要的 索性自己就写了一个如图 下面是angular 模式 $scope.getMyDate = function(str ...

  3. [Usaco2015 Jan]Moovie Mooving

    Description Bessie is out at the movies. Being mischievous as always, she has decided to hide from F ...

  4. DFS HDU 5305 Friends

    题目传送门 /* 题意:每个点都要有偶数条边,且边染色成相同的两部分,问能有多少种染色方法 DFS+剪枝:按照边数来DFS,每种染色数为该点入度的一半,还有如果点不是偶数边就不DFS 这是别人的DFS ...

  5. RabbitMQ指南之四:路由(Routing)和直连交换机(Direct Exchange)

    在上一章中,我们构建了一个简单的日志系统,我们可以把消息广播给很多的消费者.在本章中我们将增加一个特性:我们可以订阅这些信息中的一些信息.例如,我们希望只将error级别的错误存储到硬盘中,同时可以将 ...

  6. Modbus通讯协议简介

    Modbus协议简介 Modbus协议最初由Modicon公司开发出来,此协议支持传统的RS-232.RS-422.RS-485和以太网设备,许多工业设备,包括PLC,DCS,智能仪表等都在使用Mod ...

  7. LN : leetcode 515 Find Largest Value in Each Tree Row

    lc 515 Find Largest Value in Each Tree Row 515 Find Largest Value in Each Tree Row You need to find ...

  8. Javascript中的那些bug

    1. x(比如document) is not defined 不止要检查是不是没有声明变量就使用了,还要检查是不是对象的方法调用写错了!比如: alert( document.getElementB ...

  9. 【译】x86程序员手册24-第7章 多任务

    Chapter 7 Multitasking 多任务 To provide efficient, protected multitasking, the 80386 employs several s ...

  10. Detectron:Pytorch-Caffe2-Detectron的一些跟进

            pytorch官网:http://pytorch.org/上只有PyTroch的ubuntu和Mac版本,赤裸裸地歧视了一把Windows低端用户. 1. Caffe源码:Caffe源 ...