整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

在线文档:JavaScript,Jquery,css

雪峰

http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000

MDN-JavaScript

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

前端开发笔记

https://li-xinyang.gitbooks.io/frontend-notebook/content/

菜鸟教程

http://www.runoob.com/

Jquery在线手册

http://hemin.cn/jq/

在线文档-Jquery

http://tool.oschina.net/apidocs/apidoc?api=jquery

CSS参考手册

http://css.doyoe.com/

CSS3动画手册

http://isux.tencent.com/css3/index.html

CSS3-html5在线测试

http://zaole.net/

CSS3样式生成器

http://www.css88.com/tool/css3Preview/

CSS小工具集合

http://linxz.github.io/tianyizone/

CSS3 UI 库

http://css3lib.alloyteam.com/#animation/AnimatedButtons

JavaScript标准参考手册

http://www.kancloud.cn/kancloud/javascript-standards-reference/46532

李炎恢 HTML CSS JavaScript PHP Bootstrap 教程

http://www.kancloud.cn/wizardforcel/liyanhui-tutorials/154224

微信关注公众号:馨客栈,也可以加QQ群:65202496 来共同学习交流,分享资源(前端,PS,软件,电影等学习相关的资源)

Query就对javascript的一个扩展, 封装, 就是让javascript更好用, 更简单。

人家怎么说的来着, jQuery就是要用更少的代码, 漂亮的完成更多的功能。

javascript与jQuery常用方法比较

1 加载DOM区别

javascript: window.onload

实例

function first(){
alert('first');
}
function second(){
alert('second');
}
window.onload = first;
window.onload = second;
//只会执行第二个window.onload;不过可以通过以下方法来进行改进:
window.onload = function(){
first();
second();
}

jQuery: $(document).ready() 简化为$(function(){ //... })

实例1:

$(document).ready(){
function first(){
alert('first');
}
function second(){
alert('second');
}}

实例2:

$(document).ready(function(){
first();
} )
$(document).ready(function(){
second();
} ) //两条均会执行

可以简化为:

$(function(){
first();
});
$(function(){
second();
});

jQuery加载与普通加载区别

方法 window.onload $(document).ready()

执行时机 必须等待网页中的所有内容加载完毕后 网页中的所有DOM结构绘制完毕后就执行,

(包括图片才能执行) 可能DOM元素关联的东西并没有加载完

编写个数 不能同时编写多个(后者会"覆盖"前者) 能同时编写多个

简化写法 无 $()


2 获取ID

javascript: document.getElementById('idName')

jQuery: $('#idName')


3 获取name和class

javascript: document.getElementsByName('name') name属性

jQuery: $('.className') class属性


4 获取TagName

javascript: document.getElementsByTagName('tagName')

jQuery: $('tagName')

js中元素不存在使用它会报错

var div = document.getElementsByTagName("div")[0];

div.onclick = function(){

console.log("javascript");

}

jQuery不会报错

var $div = $("div");

$div.click(function(){

console.log("jQuery");

})


5 创建对象并加入文档中

javascript:

var para=document.createElement("p");
var node=document.createTextNode("这是新段落。");
para.appendChild(node);
var element=document.getElementById("div1");
element.appendChild(para);
//将p元素追加为Id为div1的lastchild子节点,如果想将新创建的p元素插入到已存在的某个元素之前,可以使用insertBefore()方法

jQuery:

jQuery提供了4种将新元素插入到已有元素(内部)之前或者之后的方法:

append()、appendTo(目标)、prepend()、prependTo(目标)。 (prepend()、prependTo(目标)插在子元素之前)

格式:$(html);

HTML代码:

<p>World!</p>

jQuery代码:

$('p').append('<b>Hello!</b>'); //输出:<p>World!<b>Hello!</b></p>
$('<b>Hello!</b>').appendTo('p'); //输出:同上
$('p').prepend('<b>Hello!</b>'); //输出:<p><b>Hello!</b>World! </p>
$('<b>Hello!</b>').prependTo('p'); //输出:同上


6 插入新元素

javascript:

insertBefore() 语法格式:

parentElement.insertBefore(newElement,targetElement)

将一个img元素插入一个段落之前。

HTML代码:

<img src="image.jpg" id="imgs" />

<p>这是一段文字</p>

javascript代码:

var imgs = document.getElementById('imgs');
var para = document.getElementsByTag('p');
para.parenetNode.insertBefore(imgs,para);

jQuery:

jQuery提供了4种将新元素插入到已有元素(外部)之前或者之后的方法:before()、insertBefore(目标)、after()、insertAfter(目标)。

格式:$('html');

HTML代码:

<p>World!</p>

jQuery代码

$('p').after('<b>Hello!</b>'); //输出:<p>World! </p><b>Hello!</b>
$('<b>Hello!</b>').insertAfter ('p'); //输出:同上
$('p').before('<b>Hello!</b>'); //输出:<b>Hello!</b><p>World! </p>
$('<b>Hello!</b>').insertBefore('p'); //输出:同上


7 复制节点

javascript:

reference = node.cloneNode(bool)

这个方法只有一个布尔型的参数, 它的可取值只能是true或者false。该参数决定是否把被复制节点的子节点也一同复制到新建节点里去。

jQuery:

clone() //复制节点后,被复制的新元素并不具有任何行为 ,默认值false,也复制子节点

clone(true) //复制节点内容及其绑定的事件

备注:该方法通常与appendTo()、prependTo()等方法结合使用。


8 删除节点

javascript:

reference = element.removeChild(node)

removeChild()方法将一个给定元素里删除一个子节点

jQuery:

remove();

remove()方法作用就是从DOM中删除所有匹配的元素,remove()方法还可以与其他的过滤选择器结合使用,非常方便。

将ul li下的title不是"Hello"的li移除:

$('ul li').remove(li[title!='Hello']);

empty(); 删除匹配的元素集合中所有的子节点。


从DOM中把所有段落删除

HTML 代码:

<p>Hello</p> how are <p>you?</p>

jQuery 代码:

$("p").remove();

把所有段落的子元素(包括文本节点)删除

HTML 代码:

<p>Hello, <span>Person</span> <a href="#">and person</a></p>

jQuery 代码:

$("p").empty();结果:

<p></p>


9 包裹节点

javascript: javascript暂无

jQuery:

wrap() //将匹配元素用其他元素的结构化标记单独包裹起来

wrapAll() //将所有匹配的元素用一个元素包裹起来

wrapInner() //将匹配元素的子内容用其他结构化的标记包裹起来

把所有的段落用一个新创建的div包裹起来

jQuery 代码:

$("p").wrap("<div class='wrap'></div>");

用一个生成的div将所有段落包裹起来

jQuery 代码:

$("p").wrapAll("<div></div>");

把所有段落内的每个子内容加粗

jQuery 代码:

$("p").wrapInner("<b></b>");


10 属性操作:设置属性节点、查找属性节点

javascript:

document.getElementsByTagName('tagName').title
document.getElementsByTagName('tagName').title="My title";
document.getElementsByTagName('tagName')['title']="My title";
document.getElementsByTagName('tagName').getAttribute('My title');
document.getElementsByTagName('tagName').setAttribute('title','My title');
document.getElementsByTagName('tagName').removeAttribute('title','My title');

jQuery:

jQuery中设置和查找属性节点都是:attr() 。

$('p').attr('title'); //获取p元素的title属性
$('p').attr('title','My title'); //设置p元素的title属性
$('p').removeAttr('title') //删除p元素的title属性
$('p').attr('title':'My title','class':'myClass'); //当需要添加多个属性时, 可以用"属性":"值"对的形式, 中间用逗号隔开。


11 替换节点

javascript:

var reference = element.replaceChild(newChild,oldChild)

该方法是将一个给定父元素里的一个子节点替换为另外一个节点。

jQuery:

replaceWith()、replaceAll()

replaceWith() 与 replaceAll() 作用相同。差异在于语法:内容和选择器的位置, 以及 replaceAll() 无法使用函数进行替换。

$(selector).replaceWith(content) 用指定的HTML内容或元素替换被选元素

$(content).replaceAll(selector) 用指定的HTML内容或元素替换被选元素。


<p>hello</p> 想替换为: <h2>Hi</h2>

jQuery代码:

$('p') .replaceWith('<h2>Hi</h2>');

或者可以写成:

$('<h2>Hi</h2>').replaceAll('p');


12 删除节点

javascript:removeChild()

var list=document.getElementById("myList");

list.removeChild(list.childNodes[0]);

jQuery:

$("p").remove();


13 CSS操作

javascript:

格式:element.style.property

CSS-DOM能够读取和设置style对象的属性, 其不足之处是无法通过它来提取外部CSS设置的样式信息, 而jQuery的css()方法是可以的。

document.body.style.backgroundColor="red";

jQuery:

格式:$(selector).css()

css()方法获取元素的样式属性

此外, jQuery还提供了height()和width()分别用来获取元素的高度和宽度(均不带单位), 而css(height)、css(width)返回高宽, 且带单位。

$("p").css({color: "#ff0011", background: "blue", "font-size":"16px" });

$("p").css({color: "#ff0011", background: "blue", fontSize:"16px" }); jQuery也支持

注意点:CSS中的如"font-size"这样有"-"的属性, 要使用首字母小写的驼峰式表示, 如fontSize。

jQuery中的css()的带横线的属性可以原样输出, 但需带引号, 也可以使用首字母小写的驮峰式表示。



javascript:

className属性

DOM对象.className = "className";

DOM对象.className += " claaaName";

DOM对象.className = "";

jQuery:

addClass(class|fn)

removeClass(class|fn)

toggleClass(class|fn)


14 表单value值的操作

javascipt:

formNode.value

formNode.attr('value');

formNode.attr('value',信息值);

jQuery:

val([val|fn|arr])

$().val(); //获得value属性值

$().val(value值); //设置value属性的值(文本框)

$().val([,,]); //设置value属性的值(单选框、复选框、下拉式列表)

该val()方法在复选框、单选按钮、下拉列表的使用有凸出表现。


15 事件的属性

相同之处

altKey Alt键是否被按下. 按下返回true

ctrlKey ctrl键是否被按下, 按下返回true

shiftKey Shift键是否被按下, 按下返回true

screenX/Y 对于鼠标事件, 获取事件相对于屏幕原点的水平/垂直坐标

type 事件的名称,如click、mouseover等

以上为javascript和jQuery相同的属性

不同之处

javascript:

clientX/Y 鼠标指针在客户端区域的坐标, 不包括工具栏、滚动条

jQuery:

pageX/Y 鼠标指针在客户端区域的坐标, 不包括工具栏,滚动条;



16 事件的兼容性

事件目标:

javascript:

IE:srcElement 标准DOM:targe

jQuery:

target 引起事件的元素/对象

keyCode和CharCode:

javascript:

charcode keycode(keypress) keycode(keydown、keyup)

IE 无 按键的Unicode值 按键的数字代码

标准DOM 按键的Unicode值 按键的数字代码 按键的数字代码

jQuery:

keyCode 对于keyup和keydown事件返回被按下的键。不区分大小写, a和A都返回65;

鼠标事件,值对应按下的鼠标键

javascript:

button IE中的按键 Firefox中的按键

0 未按下案件 左键

1 左键 中键(滑轮)

2 右键 右键

3 同时按下左、右键 不支持组合键,未按下任何键时button值为undefined

4 中键(滑轮)

5 同时按下左、中键

6 同时按下右、中键

7 同时按下左、中、右键

jQuery:

which 对于键盘事件, 返回触发事件的键的数字编码。对于鼠标事件, 返回鼠标按键号(1左,2中,3右);


15 事件设置

DOM1级事件设置

<input type="text" onclick="过程性代码" value=’tom’ />

<input type="text" onclick="函数()" />

node.onclick = function(){}

node.onclick = 函数;

DOM2级事件设置

node.addEventListener(类型,处理,事件流);

node.removeEventListener(类型,处理,事件流);

node.attachEvent();

node.detachEvent();

jquery事件设置

$().事件类型(事件处理函数fn); //设置事件

$().事件类型(); //触发事件执行

$().bind('事件类型',fn); //绑定事件

$().one('事件类型',fn); //绑定事件(一次)

$().live('事件类型',fn); //绑定事件(委派)


16 处理页面中的元素

javascript:

使用javascript脚本获取页面内容的方式主要有两种, 第一种是通过表单获取表单元素的value值。格式为:

表单名称.元素名.value;

该方式只能获取表单中的元素值,对于其他标签元素则无能为力。

第二种方式通过id名来获取页面中任意标签的内容。格式为:

document.getElementById('id'). value;

document.getElementById ('id').innerText;

使用第二种方式时要注意, 标签的id名必须存在且唯一, 否则就会出现错误。

为标签内容赋值时, 则使用如下格式:

id.innerHTML ='要显示的内容';

jQuery:

html([val|fn]) 返回值:String

取得第一个匹配元素的html内容。这个函数不能用于XML文档。但可以用于XHTML文档。

在一个 HTML 文档中, 我们可以使用html()方法来获取任意一个元素的内容。

如果选择器匹配多于一个的元素, 那么只有第一个匹配元素的 HTML 内容会被获取。

val String

function(index, html) Function

此函数返回一个HTML字符串。接受两个参数, index为元素在集合中的索引位置, html为原先的HTML值。

text()

text([val|fn]) 返回值:String

val String 用于设定HTML内容的值

function(index, html) Function 此函数返回一个HTML字符串。接受两个参数,index为元素在集合中的索引位置,html为原先的HTML值。


17 事件对象

javascript:

node.onclick = function(oEvent){
if(window.event) oEvent = window.event; //兼容性写法
}

在IE浏览器中事件对象是window对象的一个属性window.event;

在标准的DOM中规定event对象必须作为唯一的参数传给事件处理函数。

因此, javascript要处理好各浏览器的事件对象的兼容性。

jQuery:

$().bind('click',function(evt){ window.event });
$().click(function(evt){});
$().bind('mouseover',f1);
function f1(evt){}

事件对象:就直接使用的evt即可, 在jQuery框架内部对各浏览器的事件对象作出了兼容处理。


18 阻止浏览器默认动作、阻止事件冒泡

javascript:

DOM2级浏览器默认动作阻止:

事件对象.preventDefault(); 主流浏览器

事件对象.returnValue = false; IE(6,7,8)浏览器

DOM2级事件冒泡阻止:

事件对象.stopPropagation(); 主流浏览器

事件对象.cancelBubule = true; IE(6,7,8)浏览器


jQuery:

$().bind('click',function(evt){
evt.preventDefault();
evt.stopPropagation();
});

preventDefault()方法是jQuery的方法, 名字与javascript底层代码的名字一致, 并且对各浏览器作出了兼容处理。

stopPropagation()方法是jQuery的方法, 名字与javascript底层代码的名字一致, 并且对各浏览器作出了兼容处理。

return false 与event.preventDefault()区别

1. return false 实际上执行了三种操作

event.preventDefault()

event.stopPropation()

终止函数执行并立即执行

2 .为了避免对程序执行过多的隐式操作造成的Bug,建议

只需要阻止事件默认行为时,应该使用event.preventDefault()

只需要阻止事件冒泡时,应该使用event.stopPropagation()

只有当同时阻止事件冒泡和阻止事件默认行为时,才使用return false


19 页面滚动

javascript:

scrollBy() 按照指定的像素值来滚动内容。

scrollTo() 把内容滚动到指定的坐标。

<script>
function scrollWindow(){
window.scrollTo(100,500);
}
</script>
<input type="button" onclick="scrollWindow()" value="滚动条" />

jQuery:

offset([coordinates]) 获取匹配元素在当前视口的相对偏移。

返回的对象包含两个整型属性: top 和 left, 以像素计。此方法只对可见元素有效。

$("p:last").offset({ top: 10, left: 30 });

<html>
<head>
<script type="text/javascript" src="/jquery/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("button").click(function(){
x=$("p").offset();
$("#span1").text(x.left);
$("#span2").text(x.top);
});
});
</script>
</head>
<body>
<p>本段落的偏移是 <span id="span1">unknown</span> left 和 <span id="span2">unknown</span> top。</p>
<button>获得 offset</button>
</body>
</html>

输出结果: 本段落的偏移是 8 left 和 8 top。

scrollLeft() 设置或返回匹配元素相对滚动条左侧的偏移。

scrollTop() 设置或返回匹配元素相对滚动条顶部的偏移。

在各种类库满天飞,说jQuery有多快多快,可是对前端大牛来说,更定不会止步于jQuery,因而常常听到高级的前端工程师追求原生js,为何?答案是原生JS要更快,原因是JQuery这样的库必须要兼容各种浏览器和低版本和许多其他的东西,考虑通用性必然会导致性能的损耗。

当然,我不是提倡写代码纯用原生JS实现,请记住:“框架能够让我们走的更快,但只有了解原生的JS才能让我们走的更远”。


下面直接用代码示例:流行的常用的JQuery功能用原生JS实现。

选择器

JQuery选择器的强大无需赘言,然而在大多数的情况下,我们可以使用相同的代码量用原生JS轻易实现。

1.获取页面所有的div

/* jQuery */
$("div")
/* native equivalent */
document.getElementsByTagName("div")

2.获取某类名相同的一群元素

/* jQuery */
$(".my-class")
/* native equivalent */
document.querySelectorAll(".my-class")
/* FASTER native equivalent */
document.getElementsByClassName("my-class")

3.更复杂的一些选择器

/* jQuery */
$(".my-class li:first-child")
/* native equivalent */
document.querySelectorAll(".my-class li:first-child")
/* jQuery */
$(".my-class").get(0)
/* native equivalent */
document.querySelector(".my-class")


DOM操作
JQuery频繁功能就是操作DOM元素,诸如插入或删除一个元素。当然,如果使用原生JS实现这些功能,代码量肯定是会有所增加的,不过我们也可以将这些功能封装成函数,下面是一些常用的DOM操作的原生JS实现。

1.插入HTML元素

/* jQuery */
$(document.body).append("<div id='myDiv'><img src='im.gif'/></div>");
/* CRAPPY native equivalent */
document.body.innerHTML += "<div id='myDiv'><img src='im.gif'/></div>";
/* MUCH BETTER native equivalent */
var frag = document.createDocumentFragment();
var myDiv = document.createElement("div");
myDiv.id = "myDiv";
var im = document.createElement("img");
im.src = "im.gif";
myDiv.appendChild(im);
frag.appendChild(myDiv);
document.body.appendChild(frag);

CSS操作

在JQuery中可以轻松实现对css的操作,增加属性、删除属性或是检测是否存在某个类。那么你是否觉得使用原生JS实现会很麻烦呢?其实不然,因为有classList。下面是一些关于JQuery css操作的JS原生实现。

// get reference to DOM element
var el = document.querySelector(".main-content");
//----Adding a class------
/* jQuery */
$(el).addClass("someClass");
/* native equivalent */
el.classList.add("someClass");
//----Removing a class-----
/* jQuery */
$(el).removeClass("someClass");
/* native equivalent */
el.classList.remove("someClass");
//----Does it have class---
/* jQuery */
if($(el).hasClass("someClass"))
/* native equivalent */
if(el.classList.contains("someClass"))

当我们简单地逐个设置Css的属性,而并非将它们全部传递给JQuery的Css函数时,性能明显会快很多。而且,真的不会添加什么额外的代码。

// get reference to a DOM element
var el = document.querySelector(".main-content");
//----Setting multiple CSS properties----
/* jQuery */
$(el).css({
background: "#FF0000",
"box-shadow": "1px 1px 5px 5px red",
width: "100px",
height: "100px",
display: "block"
});
/* native equivalent */
el.style.background = "#FF0000";
el.style.width = "100px";
el.style.height = "100px";
el.style.display = "block";
el.style.boxShadow = "1px 1px 5px 5px red";

show与hide
show()与hide()应该也是JQuery中十分常用的方法,原生JS实现同样轻松。

// get reference to a DOM element
var el = document.querySelector(".main-content");
//----show() or hide()----
/* jQuery */
$(el).show();
$(el).hide();
/* native equivalent */
el.style.display = '';
el.style.display = 'none';

事件绑定

// get reference to a DOM element
var el = document.querySelector(".main-content");
//----Event Listener off----
/* jQuery */
$(el).off(eventName, eventHandler);
/* native equivalent */
el.removeEventListener(eventName, eventHandler);
//----Event Listener on----
/* jQuery */
$(el).on(eventName, eventHandler);
/* native equivalent */
el.addEventListener(eventName, eventHandler);

jQuery的确是个了不起的库,如果同样轻松的使用JS实现jQuery,尽量使用JS。即使优化有点吹毛求疵,由于html5游戏的迅速崛起,这点优化就显得格外的宝贵。

文/丁向明

做一个有博客的web前端自媒体人,专注web前端开发,关注用户体验,加我qq/微信交流:6135833

http://dingxiangming.com