jQuery 初探
一、jQuery和原生js的区别
从字面上就可以知道 jQuery 等于 javaScript + jQuery ,JQ强大的DOM节点查询,把查询节点简化到极致,把节点的增删改查简化到极致,至于怎么操作,那是自己的事
1、举一个例子,设置A链接为红色,点击后加10像素的红色边
使用原生态js
<a href="###">这是一个连接</a>
<script>
var a = document.getElementsByTagName('a')[0];
a.style.color="red";
a.onclick = function(){
this.style.border='10px solid red';
}
</script>jQuery链式操作一行代码就可以实现
<a href="###">这是一个连接</a>
<script>
var a = $('a');
a.css('color','pink').click(function(){
$(this).css('border','10px solid green');
});
</script>2、第二个例子,点击p标签,弹出p标签的内容
原生js需要循环p标签
<p>第一个p标签</p>
<p>第二个p标签</p>
<p>第三个p标签</p>
<script>
var p = document.getElementsByTagName('p');
var len = p.length;
for (var i =0, i < len; i++) {
p[i].onclick=function(){
alert(this.innerHTML);
}
}
</script>jQuery的隐式迭代,不需要循环
<p>第一个p标签</p>
<p>第二个p标签</p>
<p>第三个p标签</p>
<script>
var p = $('p').click(function(){
alert($(this).html());
});
</script>二、CDN
http://cdn.code.baidu.com http://apps.bdimg.com/libs/jquery/1.9.1/jquery.js http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js
CDN的路径失效后,自动切换本地的jQuery
<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="jquery.min.js"><\/script>');</script>三、页面加载完后在执行js代码
原生态 window.onload 方法
1. 要图片、flash、音频、视频都加载完后才执行
2. 一个页面只能写一个window.onload方法
alert('看不到文字');
window.onload=function(){
alert('看到文字了');
}用jQuery的ready方法,DOM加载完后就可以执行,而且可以写N个
$(document).ready(function(){
alert('看见文字了');
});简写
$(function(){
alert('简写版');
});四、jQuery对象和DOM对象
用原生DOM方法获得的对象就是DOM对象
<p id="p">分别用js与jQuery获得文字内容</p>
<script>
var p = document.getElementById('p');
alert(p.innerHTML);
</script>用jQuery选择器得到的对象就是jQuery对象
<p id="p">分别用js与jQuery获得文字内容</p>
<script>
$(function(){
var p-jQuery = $('p');
alert(p-jQuery.html()); // PS:这里不能用原生js的innerHTML,只能用jqery的html()方法
});
</script>DOM对象不能使用任何jQuery方法,只能使用DOM方法,
如果DOM对象中方法,在jQ库中被改写过的就可以使用,比如 length 和 toString() 在jQuery中被改写过的(那些被改写过,目前不太清楚)
alert(p.length); // 1 alert(p.toString()); // [object Object]
jQuery对象转换成DOM对象
1. index索引
2. get()方法
<input type="text" id="a" value="随便打几个字" />
<script>
$(function(){
var input = $('#a');
alert(input.val()); // jQuery方法
alert(input[0].value); // jQuery转换原生DOM对象
alert(input.get(0).value); // 使用get()方法转成原生DOM
});
</script>原生DOM对象转换城jQuery对象,只要DOM对象用 $() 包起来就OK
$(function(){
var input-jQuery = document.getElementById('a');
alert($(input-jQuery).val());
});五、jQuery和其它库共存
使用 jQuery.noConflict() 方法释放$权限
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript" src="http://apps.bdimg.com/libs/prototype/1.7.1.0/prototype.js"></script>
<meta charset="UTF-8">
<title>jquery和其它库共存</title>
</head>
<body>
<input type="text" id="libai" value="窗前明月光">
<script type="text/javascript">
jQuery.noConflict(); // 释放$
alert($F('libai')); // 使用prototypejs.org库
alert(jQuery('#libai').val()); // 用的是jQuery不是$
</script>
</body>
</html>也可以定义一个变量替代$
var sowhat = jQuery.noConflict();
alert(sowhat('#libai').val()); // 窗前明月光还有一种方法在大型项目中会用到
在引入库时候,先引入jquery.min.js在引入prototype.js
src="jquery.js"
src="prototype.js"
应用时候也先jquery在prototype
alert($('#libai').val());
alert($F('libai'));
js与jqeury的比较
js原生态写法
1. 页面加载完毕的时候,让a标签里的文字变成红色
2. 点击a标签的时候,给a标签加上黄色的边框
<a href="#">aaaaa</a>
<script>
//js原生态写法
var a = document.getElementsByTagName('a')[0];
a.style.color = "red";
// 匿名函数后面要加分号
// 什么是匿名函数?
// 创建一个函数并将它赋值给变量,这种情况下创建的函数,即匿名函数(函数表达式就是匿名函数)
a.onclick = function(){
this.style.border = "10px solid #f90";
};
</script>jquery写法
$('a').css('color' ,'red').click(function(){
$(this).css('border' ,'10px solid #38a38a');
});Example2
js原生态的写法,当点击每个p标签的时候,我要弹出当前p标签里的内容
<p>第1个p标签</p>
<p>第2个p标签</p>
<p>第3个p标签</p>
<script>
var p = document.getElementsByTagName('p');
for(var i=0;i<p.length;i++){
p[i].onclick = function(){
alert(this.innerHTML);
};
}
</script>一般情况下不需要循环便利dom对象
$('p').click(function(){
alert($(this).html());
});jquery对象与其他js库如何共存
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jquery对象与其他js库如何共存</title>
<script src="http://apps.bdimg.com/libs/prototype/1.7.1.0/prototype.js"></script>
<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
<!--
大型项目中不止使用一个库
使用jquery中的noConflict()方法释放$的控制权
-->
<input type="text" id="a" value="input标签">
<script>
// 使用jquery noConflict()方法释放$的控制权
jQuery.noConflict();
alert('这是prototype库弹出的'+$F('a'));
alert('这是jquery弹出的'+jQuery('#a').val());
</script>
</body>
</html>demo 2
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<!-- 两个库的引入次序,先引入jquery ,也能解决目前这个例子的问题-->
<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://apps.bdimg.com/libs/prototype/1.7.1.0/prototype.js"></script>
</head>
<body>
<input type="text" id="a" value="input标签">
<script>
alert('这是prototype弹出的'+$F('a'));
alert('这是jquery弹出的'+jQuery('#a').val());
</script>
</body>
</html>demo3
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jquery对象与其他js库如何共存</title>
<script src="http://apps.bdimg.com/libs/prototype/1.7.1.0/prototype.js"></script>
<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
<!--
大型项目中不止使用一个库
使用jquery noConflict()方法释放$的控制权
-->
<input type="text" id="a" value="input标签">
<script>
//不用jQuery定义成Glee
var Glee = jQuery.noConflict();
alert('这是prototype弹出的'+$F('a'));
alert('这是jquery弹出的'+Glee('#a').val());
</script>
</body>
</html>