//用 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. bzoj 1774: [Usaco2009 Dec]Toll 过路费【排序+Floyd】

    非常迷的一道题啊 我觉得挺对的版本只得了30 总之就是Floyd·改,开两个数组,一个是d[i][j]就是普通的只有边权的最短路,a[i][j]是题目要求的那种 具体改的地方是把枚举中转点的地方把中转 ...

  2. bzoj1528 sam-Toy Cars(贪心,优先队列)

    「BZOJ1528」[POI2005] sam – Toy Cars Description Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Ja ...

  3. 数据据操作 tp5

    数据库操作-DB类 学习手册 数据库配置 注意1:在TP里面,可以在模块下面单独的建立一个database.php配置文件,代表这个模块就使用配置的这个数据库 注意2:我们可以在config.php里 ...

  4. Kafka~服务端几个常用的命令

    在Centos上安装和部署完成kafka之后,我们就可以向服务端推消息和消费它了,今天主要聊几个常用的命令,比建立topic,从broken显示所有topics列表,向broken发消息,从broke ...

  5. RabbitMQ指南之五:主题交换器(Topic Exchange)

    在上一章中,我们完善了我们的日志系统,用direct交换器替换了fanout交换器,使得我们可以有选择性地接收消息.尽管如此,仍然还有限制:不能基于多个标准进行路由.在我们的日志系统中,我们可能不仅希 ...

  6. LN : leetcode 3 Longest Substring Without Repeating Characters

    lc 3 Longest Substring Without Repeating Characters 3 Longest Substring Without Repeating Characters ...

  7. 读《An Adaptable and Extensible Geometry Kernel》

    读<An Adaptable and Extensible Geometry Kernel> 利用Curiously Recurring Template Pattern替代虚函数 详细内 ...

  8. TASKCTL5.0日志乱码解决方案

    从大学毕业到现在,做了不少银行外包项目,数据类的项目基本都用到taskctl调度产品,一直习以为然,觉得调度产品都应该是这样的,所以也没觉得怎样,直到后来有两个外包项目没用taskctl调度工具,要接 ...

  9. PostgreSQL 备忘

    truncate table page_frame_mst; select setval('page_frame_mst_id_seq', 1, false): select setval('imag ...

  10. 场景分割:MIT Scene Parsing 与DilatedNet 扩展卷积网络

    MIT Scene Parsing Benchmark简介 Scene parsing is to segment and parse an image into different image re ...