转自:http://itakeo.com/blog/2015/07/28/nojq/

随着IE6、7、8的逐渐淘汰,HTML5的兴起,以及侧重点放在了移动端,jQuery可能变的不在那么重要,原生一样很好用。下面介绍几个原生替换jq的方法。

获取元素

JQuery

  

$('.xxx');  //class获取
$('#xxx'); //id获取
$('.xxx.ccc'); //同时包含xxx和ccc
$('.xxx,.zzz'); //多选
$('.xxx div'); //子类
$('.xxx p:first'); //第一个P元素

原生js

  

//querySelector基本上实现了jq选择器同样的功能,具体可以自己测试,另外querySelector返回的是第一个元素,querySelectorAll则返回所有选择的元素。
document.querySelector('.xxx'); //class获取
document.querySelector('#xxx');//id获取
document.querySelector('.xxx.ccc');//同时包含xxx和ccc
document.querySelector('.xxx,.ccc');//多选
document.querySelector('.xxx div');//子类
document.querySelector('.xxx p:first-child');//第一个P元素

添加class

JQuery

$('.xxx').addClass('class_name');  

原生js

el.classList.add('class_name');  

删除class

JQuery

 $('.xxx').removeClass('class_name');  

原生js

el.classList.remove('class_name');  

切换class

JQuery

$('.xxx').toggleClass('class_name');  

原生js

el.classList.toggle('class_name');  

是否包含某个class

JQuery

$('.xxx').hasClass('class_name');  

原生js

el.classList.contains('class_name'); 

上面是HTML5提供的新的方法,如果你非要为了兼容所谓的IE,可以用下面的这些

//是否包含class
function hasClass(o, n){
return new RegExp('\\b'+n+'\\b').test(o.className);
};
//添加class
function addClass(o, n){
if(!hasClass(o, n)) o.className+=' '+n;
};
//删除class
function delClass(o, n){
if(hasClass(o, n)){
o.className = o.className.replace(new RegExp('(?:^|\\s)'+n+'(?=\\s|$)'), '').replace(/^\s*|\s*$/g, '');
};
};

插入HTML

JQuery

$(el).before(htmlString);
$(parent).append(el);
$(el).after(htmlString);

原生js

parent.appendChild(el);
el.insertBefore(NewDom,ele);
ele.insertAdjacentHTML("beforeend", '<li>内容</li>');
//具体insertAdjacentHTML的介绍,请移步到 这篇文章(点击这里)
 

获取子节点

JQuery

$('.xxx').children();  

原生js

ele.children;  

上一个节点

JQuery

$('.xxx').prev();  

原生js

var prev = ele.previousElementSibling || ele.previousSibling   

下一个节点

JQuery

$('.xxx').next();  

原生js

var next = ele.nextElementSibling || ele.nextSibling   

父节点

JQuery

$('.xxx').parent();  

原生js

ele.parentNode  

上下节点

JQuery

$(ele).siblings();  

原生js

var siblings = Array.prototype.slice.call(el.parentNode.children);
for (var i = siblings.length; i--;) {
if (siblings[i] === el) {
siblings.splice(i, 1);
break;
};
};
;[].forEach.call(el.parentNode.children, function(child){
if(child !== el);
});
 

循环节点

JQuery

$(selector).each(function(i, el){
//xxx
});

原生js

[].forEach.call(ele,function(el,i){
//xxx
});

克隆节点

JQuery

$('.xxx').clone(true);  

原生js

ele.cloneNode(true)  

创建节点

JQuery

var ele = $('<div></div>');  

原生js

var ele = document.createElement('div'); 

删除节点

JQuery

$(ele).remove();  

原生js

//父节点开始删除
parent.removeChild(ele);

获取、设置、删除属性

JQuery

$(ele).attr(name,value) //设置
$(ele).attr(name) //获取
$(ele).removeAttr(name) //删除

原生js

ele.setAttribute(name,value);//设置
ele.getAttribute(name);//获取
ele.removeAttribute(name);//删除

Data属性

JQuery

$("body").data("foo", 52);  //设置
$("body").data("foo"); //获取
$("body").removeData("foo"); //删除

原生js

ele.dataset.foo = 52  //设置
ele.dataset.foo //获取 //也可通过attribute方法来设置获取和删除
ele.setAttribute('data-foo', 52);//设置
ele.getAttribute('data-foo'); //获取
ele.removeAttribute('data-foo');//删除

获取内容

JQuery

var html = $(ele).html();  

原生js

var html = ele.innerHTML; 

清空元素内容

JQuery

$(el).empty();

原生js

el.innerHTML = '';  

获取文本

JQuery

$(ele).text();  

原生js

var txt = ele.textContent || ele.innerText  

设置css

JQuery

$(ele).css('height','300px');  

$(ele).css({
height:300
});

原生js

ele.style.height = '300px';  

ele.style.cssText = 'height:200px;color:red;left:100px;' 

获取css

JQuery

$(obj).css('marginLeft');  

原生js

function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return getComputedStyle(obj,null)[attr];
};
};

显示隐藏

JQuery

$(el).show();
$(el).hide();

原生js

el.style.display = '';
el.style.display = 'none';

元素的高度(宽度同理)[height]

JQuery

$(ele).height();  

原生js

function height(el){
var _height = el.clientHeight;
var style = el.currentStyle || getComputedStyle(el);
return _height - (parseInt(style.paddingTop) + parseInt(style.paddingBottom));
};

元素的内高度(宽度同理)[height + padding]

JQuery

$(ele).innerHeight();  

原生js

ele.clientHeight;  

元素的外高度(宽度同理)[height + padding + border]

JQuery

$(ele).outerHeight();  

原生js

ele.offsetWidth;  

元素的外高度(宽度同理)[height + padding + border + margin]

JQuery

$(ele).outerHeight(true);  

原生js

function outerHeight(el){
var style = el.currentStyle || getComputedStyle(el);
var height = el.offsetHeight + parseInt(style.marginTop) + parseInt(style.marginBottom);
return height;
};

元素的位置

JQuery

$(ele).position().left;
$(ele).position().top; $(ele).offset().left;
$(ele).offset().top;

原生js

ele.offsetLeft;
ele.offsetTop; function getposi(obj){
var t = 0,l = 0;
while(obj){
t+=obj.offsetTop;
l+=obj.offsetLeft;
obj = obj.offsetParent;
};
return {top:t,left:l};
};
//getposi(ele).left
//getposi(ele).top
ele.getBoundingClientRect().top + window.pageYOffset;
ele.getBoundingClientRect().bottom + window.pageYOffset;
ele.getBoundingClientRect().left + window.pageYOffset;
ele.getBoundingClientRect().right + window.pageXOffset;
 

Document Ready 事件

JQuery

$(document).ready(function() {
// Code
});

原生js

document.addEventListener("DOMContentLoaded", function() {
// Code
},false);

Document load 事件

JQuery

$(window).load(function() {
// Code
});

原生js

document.addEventListener("load", function() {
// Code
},false);

添加事件

JQuery

$(document).click(function(){
//xxx
});

原生js

document.onclick = function(){
//XXX
};

绑定事件

JQuery

$(ele).on('click',function(){
//xxx
});

原生js

document.addEventListener("click", function() {
//xxx
},false); [].forEach.call(ele,function(o){
o.addEventListener("click", function() {
//xxx
},false);
});

获取数据类型

JQuery

$.type(obj);  

原生js

function type(obj){
return Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/, "$1").toLowerCase();
};

判断是否为数组

JQuery

$.isArray(arr);  

原生js

function isArray (v){
return Object.prototype.toString.call(v) === '[object Array]';
};

去除字符串两端的空格

JQuery

$.trim(string); 

原生js

//去除两端空格
String.prototype.trim = function() {
var reExtraSpace = /^\s*(.*?)\s+$/;
return this.replace(reExtraSpace, "$1")
}
/***扩展一下***/
//去除左边空格
String.prototype.ltrim = function() {
return this.replace( /^(\s*| *)/, "");
}
//去除右边空格
String.prototype.rtrim = function() {
return this.replace( /(\s*| *)$/, "");
}
//替换全部
String.prototype.replaceAll = function(s1, s2) {
return this.replace(new RegExp(s1, "gm"), s2)
}
//去除所有空格,需要配合上面的替换全部
String.prototype.trimAll = function() {
var reExtraSpace = /\s*(.*?)\s+/;
return this.replaceAll(reExtraSpace, "$1")
}

Cookie

JQuery

$.cookie('cookie'); // 读取 cookie
$.cookie('cookie', 'value'); // 存储 cookie
$.cookie('cookie', 'value', { expires: 7 }); // 存储一个带7天期限的 cookie
$.cookie('cookie', '', { expires: -1 }); // 删除 cookie

原生js

  1. 原生js对cookie的操作,请移步之前的文章,点击打开

Ajax

JQuery

$.ajax({
type: 'POST',
url: '/my/url',
data: data
});

原生js

var request = new XMLHttpRequest();
request.open('POST', '/my/url', true);
request.send(data);

放弃jQuery,使用原生js吧!的更多相关文章

  1. 通过游戏认识 --- JQuery与原生JS的差异

      前言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨是“write ...

  2. jQuery与原生js实现banner轮播图

    jQuery与原生js实现banner轮播图: (jq需自己加载)(图片需自己加载) <!DOCTYPE html> <html> <head> <meta ...

  3. 原生JS的使用,包括jquery和原生JS获取节点、jquery和原生JS修改属性的比较

    一.前言 相比于JS这条直达终点.满是荆棘的小路,jquery无疑是康庄大道了,足够的简洁.易用给了它辉煌的地位.然而,毕竟是绕着道的插件,当小路走着走着变成大路的时候,曾经的大路也就失去了他自身的优 ...

  4. 通过案例来剖析JQuery与原生JS

    首先来个例子: 我们在登陆或者注册一些网站时,如果某一项点过了但没填,鼠标移走后是不是经常看到网站有相应的红色字体提示呢? 那下面我们就以这个为例来剖析下jQuery和原生JS的一些区别,来上代码: ...

  5. 用jQuery基于原生js封装的轮播

    我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...

  6. JQuery和原生JS跨域加载JSON数据或HTML。

    前提:有时候需要在网页上,加载另一个网站上的数据.或者加载另一个网站上的一个页面.Js的Ajax请求不具备跨域功能,可以使用JQuery来实现. 网页端JS代码: $(function () { $. ...

  7. jquery与原生JS实现增加、减小字号功能

    预览效果: 实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  8. 类似jQuery的原生JS封装的ajax方法

    一,前言: 前文,我们介绍了ajax的原理和核心内容,主要讲的是ajax从前端到后端的数据传递的整个过程. Ajax工作原理和原生JS的ajax封装 真正的核心就是这段代码: var xhr = ne ...

  9. jQuery和原生JS的对比

    原生JS的缺点: 不能添加多个入口函数(window.onload),如果添加了多个,后面的会把前面的覆盖掉 原生js的api名字太长,难以书写,不易记住 原生js有的代码冗余 原生js中的属性或者方 ...

  10. JavaWeb_Ajax通过JQuery和原生js异步传输数据

    菜鸟教程 传送门 AJAX 优点:在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容 XMLHttpRequest 对象 传送门 (一) [JQuery]定时发送ajax请求 (二) ...

随机推荐

  1. 2018.10.02 bzoj4009: [HNOI2015]接水果(整体二分)

    传送门 整体二分好题. 考虑水果被盘子接住的条件. 不妨设水果表示的路径为(x1,y1)(x_1,y_1)(x1​,y1​),盘子表示的为(x2,y2)(x_2,y_2)(x2​,y2​) 不妨设df ...

  2. Linux上查看造成IO高负载的进程

    方法1:使用iotop工具这是一个python脚本工具,使用方法如:iotop -o方法2:使用工具dmesg使用dmesg之前,需要先开启内核的IO监控:echo 1 >/proc/sys/v ...

  3. linux常见命令整理

    Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touc ...

  4. day02(继承,重写,this,super,final,抽象类)

    继承 概述:日常生活中儿女总会继承长辈的遗产,java语言也是.通过继承多种实物之间形成一种关系. 特点: ①一个类只能继承一个父类 ②一个父类可以有多个子类 ③可以多层继承(a类继承b类   C类继 ...

  5. 从LSM-Tree、COLA-Tree谈到StackOverflow、OSQA

    转自: http://blog.csdn.net/v_july_v/article/details/7526689 从LSM-Tree.COLA-Tree谈到StackOverflow.OSQA 作者 ...

  6. ZUFE2389: Occult的卡片升级计划(DP) 2016-05-17 23:12 113人阅读 评论(0) 收藏

    2389: Occult的卡片升级计划 Description Occult喜欢玩一款手游,手游中有很多好看的卡片.他想要升级这些卡. 现在他有m块经验石,目标是强化一张卡片,卡片最开始的时候是0级, ...

  7. OpenGl 绘制一个立方体

    OpenGl 绘制一个立方体 为了绘制六个正方形,我们为每个正方形指定四个顶点,最终我们需要指定6*4=24个顶点.但是我们知道,一个立方体其实总共只有八个顶点,要指定24次,就意味着每个顶点其实重复 ...

  8. KNN和K-Means的区别

    KNN和K-Means的区别 KNN K-Means 1.KNN是分类算法 2.监督学习 3.喂给它的数据集是带label的数据,已经是完全正确的数据 1.K-Means是聚类算法 2.非监督学习 3 ...

  9. springmvc 孔浩 hibernate

    以上为项目文件 用到的jar包:http://pan.baidu.com/s/1kT1Rsqj 1. model-User 2. beans.xml-去哪些包中找annotation:查找相应的实体类 ...

  10. cxgrid动态显示行号

    uses cxLookAndFeelPainters; type TMyCxGrid = class(TObject)    class procedure DrawIndicatorCell(    ...