jquery笔记
1、导入jquery
jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)于2006年1月由JohnResig发布。
jQuery设计的宗旨是“writeLess,DoMore”,即倡导写更少的代码,做更多的事情。
黑马第十期
导入类库 <script src="../js/jquery-1.4.2.js"></script>
https:
https:
window.onload 这个表示加载完页面所有东西以后才执行。
window.load 这个只是表明事件方法,但并未执行,比如click表示点击事件,但他并未执行,必须用上onclick他才会执行。
window.onload 必须等到页面内包括图片的所有元素加载完毕后才能执行,$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。
window.onload 不能同时编写多个,如果有多个window.onload方法,只会执行一个,$(document).ready()可以同时编写多个,并且都可以得到执行。
window.onload 没有简化写法,$(document).ready(function(){})可以简写成$(function(){}) $().ready(function(){}) 。
$().ready(L);
function L(){
alert(222);
}
$().ready(function(){
alert(333);
});
jquery 和 dom 的转换
<script type="text/javascript">
window.onload = function(){
//dom对象转换jquery
var domObj = document.getElementById("username");
var jqueryObj = $(domObj);
//alert(jqueryObj);
//jquery转换dom。jquery是数组
var jquery1=$("#username");
var dom1=jquery1.get(0);
var dom2=jquery1[0];
//alert(dom1+"-"+dom2);
}
</script>
2、选择器
基本选择器 $("#1")
<script type="text/javascript">
$("#b1").click(function(){
$("#1").css("background-color","#ffff00");
});
$("#b2").click(function(){
$("div").css("background-color","ff00dd");
});
$("#b3").click(function(){
$(".mini").css("background-color","aa00dd");
});
$("#b4").click(function(){
$("*").css("background-color","aa2233");
});
$("#b5").click(function(){
$("div,.class").css("background-color","aa4433");
});
</script>
属性选择器 $("div[title='va']")
<script type="text/javascript">
$("#b1").click(function(){
$("div[title]").css("background-color","#aaaaff");
});
$("#b2").click(function(){
$("div[title='va']").css("background-color","#ffaaff");
});
$("#b3").click(function(){
$("div[title^=te]").css("background-color","red");
});
$("#b4").click(function(){
$("input[type=hidden],#b2,.mini,div[title^=te]").css("background-color","blue");
});
</script>
层次选择器 子选择器 $("#one>div")
<script type="text/javascript">
$("#b1").click(function(){
$("body div").css("background-color","red");
});
$("#b2").click(function(){
$("#one>div").css("background-color","blue");
});
$("#b3").click(function(){
$("#one+div").css("background-color","black");
});
$("#b4").click(function(){
$("#two").parent().children("div").css("background-color","#aaccaa");
});
$("#b5").click(function(){
$("#one~div").css("background-color","grey");
});
</script>
过滤选择器 偶数 $("div:even")
<script type="text/javascript">
$("#b1").click(function(){
$("div:first").css("background-color","red");
});
$("#b11").click(function(){
$("div:last").css("background-color","grey");
});
$("#b2").click(function(){
$("div:not(#o2)").css("background-color","yellow");
});
$("#b3").click(function(){
$("div:even").css("background-color","grey");
});
$("#b4").click(function(){
$("div:gt(3)").css("background-color","red");
});
$("#b5").click(function(){
$("div:lt(5):gt(2)").css("background-color","red");
});
</script>
table行背景色
<script src="../js/jquery-1.4.2.js"></script>
<script type="text/javascript">
$().ready(function(){
$("#t1 tr:even").css("background","red");
$("#t1 tr:odd").css("background","blue");
$("#t2 tr:gt(0):even").css("background","red");
// $("#t2 tr:gt(0):odd").css("background","blue");
$("#t2 tr:not(:first):odd").css("background","yellow");
$("#t3 tr:not(:first):odd").each(function(){
//alert(this);
var jobj =$(this);
jobj.children("td:first").css("background","red");
});
// $("#t3 tr:not(:first):even").each(function(){
// //alert(this);
// var jobj =$(this);
// jobj.children("td:first").css("background","yellow");
// });
$.each($("#t3 tr:not(:first):even"),function(){
//alert(this);
var jobj =$(this);
jobj.children("td:first").css("background","yellow");
});
});
</script>
子选择器 $("div(.one) :nth-child(2)") $("div(.one) div:nth-child(2)") $("div(.one):nth-child(2)")
<script src="../js/jquery-1.4.2.js"></script>
<style type="text/css">
.one{margin:20px;
background-color:#aabb00;
width:200px;
height:150px;}
div{
background-color:#aabbcc;
width:50px;
height:30px;}
</style>
<script type="text/javascript">
$().ready(function(){
$("#b1").click(function(){
$("div(.one) :nth-child(2)").css("background","red");
});
$("#b3").click(function(){
$("div(.one) div:last-child").css("background","yellow");
});
});
</script>
内容选择器
<input type="button" id="b1" value="改变含有con的div背景色">
<input type="button" id="b2" value="改变没有文本的div背景色">
<input type="button" id="b3" value="改变含有class为pl的div背景色">
<input type="button" id="b4" value="改变含有子元素的div背景色">
<script type="text/javascript">
$("#b1").click(function(){
$("div:contains('cont')").css("background","red");
});
$("#b2").click(function(){
$("div:empty").css("background","blue");
});
$("#b3").click(function(){
$("div:has(.pl)").css("background","yellow");
});
$("#b4").click(function(){
$("div:parent").css("background","#11aaaa");
});
</script>
表单选择器
<html>
<head>
<title>form_selector.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<script src="../js/jquery-1.4.2.js"></script>
</head>
<body>
<form>
<input type="button" id="b1" value="改变可调属性的值"/><br/>
<input type="button" id="b2" value="显示interet被选个数"/><br/>
<input type="button" id="b3" value="显示interet被选option"/><br/>
<input type="button" id="b4" value="显示隐藏域内容"/><br/>
<hr/>
job
<select id="job">
<option selected="selected">select</option>
<option id="java">java</option>
<option id="c">c</option>
<option id="c++">c++</option>
<option id="jquery">jquery</option>
</select>
<hr/>
interet
<select id="interet" multiple="multiple" size="3">
<option id="java" selected="selected">java</option>
<option id="c">c</option>
<option id="c++">c++</option>
<option id="jquery">jquery</option>
<option id="jquery2">jquery2</option>
<option id="jquery3">jquery3</option>
<option id="jquery4">jquery4</option>
</select>
<input type="text" value="文本不可调" disabled="true">
<input type="text" value="文本" disabled="true">
<input type="text" value="文本可调">
<hr/>
checkbox
<input type="checkbox" id="jobc" checked="checked">老师
<input type="checkbox" id="jobc">学生
<input type="checkbox" id="jobc">工人
<input type="checkbox" id="jobc">程序员
<hr/>
radio
<input type="radio" id="sex" name="sex" checked="checked">男
<input type="radio" id="sex" name="sex">女
<input type="hidden" value="hd1">
<input type="hidden" value="hd2">
<input type="hidden" value="hd33">
<input type="hidden" value="hd4">
</form>
<script type="text/javascript">
$("#b1").click(function(){
//$("input:disabled").val("aaa");
$("input:enabled").val("改111");
});
$("#b2").click(function(){
//alert($("#interet>option").length);
alert($("#interet>option:selected").length);
});
$("#b3").click(function(){
// alert($("input[type='checkbox']:checked").length);
alert($("#interet>option:selected").text());
});
$("#b4").click(function(){
$("input:hidden").each(function(){
var $obj=$(this);
alert($obj.val());
});
});
</script>
</body>
</html>
3、ajax
function queryMethod(){
$.ajax({
url:"../../AA",
data:{method:'query'},
success:function(data){
var jsonObj=eval("("+data+")");
for(var i=0;i<jsonObj.length;i++){
var name=jsonObj[i].name;
var email = jsonObj[i].email;
var phone = jsonObj[i].phone;
var id = jsonObj[i].id;
$tr = $("<tr/>");
$inputId = $("<input/>").attr("type","hidden").attr("name","id").attr("value",id);
$nameTD = $("<td/>").text(name);
$emailTD = $("<td/>").text(email);
$phoneTD = $("<td/>").text(phone);
$delA = $("<a/>").text("删除").css("cursor","pointer").css("text-decoration","underline");
$delA.click(function(){
if(window.confirm("确定删除吗?")){
deleteUser(this);
}
});
$delTD = $("<td/>").append($delA);
$updateA = $("<a/>").text("修改").css("text-decoration","underline");
$updateTD = $("<td/>").append($updateA);
$tr.append($nameTD).append($emailTD).append($phoneTD).append($updateTD).append($delTD).append($inputId);
$("#user>tbody").append($tr);
}
},
error: function(XMLHttpRequest, textStatus, errorThrown){
alert("error");
}
});
}
public void getPersonAll(){
List<Person> persons=(ArrayList<Person>)this.getServletContext().getAttribute("persons");
String str=JSONArray.fromObject(persons).toString();
response.setContentType("text/html;charset=utf-8");
try {
response.getWriter().println(str);
} catch (IOException e) {
e.printStackTrace();
}
}
ajax
$("#addUser").click(function(){
var name=$("#name").val();
var email=$("#email").val();
var phone=$("#phone").val();
$.ajax({
url:"../../AA",
success:function(){
var $updateA = $("<a/>").css("cursor","pointer").text("修改");
$updateA.click(function(){
updateUser(this);
});
var $delA = $("<a/>").css("cursor","pointer").css("text-decoration","underline").text("删除");
$delA.click(function(){
if(window.confirm("确定删除吗?")){
deleteUser(this);
}
});
var $nameTD = $("<td/>").text(name);
var $emailTD = $("<td/>").text(email);
var $phoneTD = $("<td/>").text(phone);
var $updateTD = $("<td/>").append($updateA);
var $delTD = $("<td/>").append($delA);
var $idHidden = $("<input/>").attr("type","hidden").attr("name","id").attr("value",count);
var $userTR = $("<tr/>")
.append($nameTD).append($emailTD).append($phoneTD)
.append($updateTD).append($delTD).append($idHidden);
$("table(#user)>tbody").append($userTR);
count++;
},
data:{
method:'add',
id:count,
name:name,
email:email,
phone:phone
},
error:function(){
alert("error");
}
});
4、function
function是一个对象
Function是最顶层对象
任何对象都有可能成为任何对象的属性
function Person(){
}
Person.id=2;
Person.name='ass';
function Student(){
alert("student");
}
Person.student=Student;
Student();
function A(){}
function b(){}
function c(){}
function d(){alert("dd");}
A.B=b;
A.B.C=c;
A.B.C.D=d;
A.B.C.D();
prototype
function Person(){
}
Person.prototype.id=11;
Person.prototype.name="aa";
var p=new Person();
alert(p.id);
alert("空-"+p.name);
function Student(){}
Student.prototype=Person.prototype;
alert(Student.prototype.name);
json
var j={
a:'aa',
b:'bb',
c:function(){alert("cc");}
};
j.d='dd';
j['e']='ee';
for(var i in j){
if(typeof j[i] == 'string'){
alert("string-"+j[i]);
}else if(typeof j[i] == 'function'){
j[i]();
}
}
extend
function extend2(json,proto){
function F(){}
if(typeof json == "object"){
for(var i in json){
F.prototype[i]=json[i];
}
}
else if(typeof json == "function"){
F.prototype = json.prototype;
for(var i in proto){
F.prototype[i]=proto[i];
}
}
return F;
}
var Person=extend2({
id:'11',
name:'scott'
});
var p=new Person();
alert(p.name);
var Student = extend2(Person,{
age:'22',
sex:'man'
});
var s=new Student();
Person.prototype.name="ppp";
s.name="ssss";
alert(s.name);
alert("p"+p.name);
alert(Person.prototype.name);
delegate 给未来的元素添加事件
$().ready(function(){
$("div").unbind("click");
$("div").bind("click",function(){
alert("afdsa");
});
$("body").delegate("div","click",function(){
alert("1");
});
$("input[type='button']").bind("click",function(){
$("body").append($("<div/>").text("aaaaaaa"));
});
});
自定义事件
$().ready(function(){
$("div").unbind("学好java");
$("div").bind("学好java",function(event,a){
alert(a);
});
$("div").unbind("click");
$("div").bind("click",function(){
$(this).trigger("学好java",5);
});
$("p").unbind("学jquery");
$("p").bind("学jquery",function(event,obj){
alert(obj.a);
alert(obj.b);
});
$("p").unbind("click");
$("p").bind("click",function(){
$(this).trigger("学jquery",{
a:'aaa',
b:'bbb'
});
});
});
function ajaxFunction(){
var xmlHttp;
try {
xmlHttp = new XMLHttpRequest();
}
catch (e) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
}
}
}
return xmlHttp;
}
var xmlHttp;
function ajax(json){
xmlHttp = ajaxFunction();
xmlHttp.onreadystatechange = function(){
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
json.callback(xmlHttp.responseText);
}
}
};
xmlHttp.open(json.method, json.url, true);
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(json.data);
}
window.onload = function(){
ajax({
url:'../AjaxServlet',
data:null,
method:'post',
callback:function(data){
alert(this);
alert(data);
}
});
};
this
function Person(){
alert(this);
}
function Student(){
var d=3;
}
Student.per=Person;
Student.per();
Person();
Person.call(Student);
var json={
a:Person
};
json.a();
(function(window){
function Person(){
return{
getName:getName,
setName:setName,
getAge:getAge,
setAge:setAge
};
}
function getName(){
return this.name;
}
function setName(name){
this.name=name;
}
function getAge(){
return this.age;
}
function setAge(age){
this.age=age;
}
function getSex(){
return this.sex;
}
function getJob(){
return this.job;
}
window.Person=Person;
})(window);
var p=new Person();
p.setName("aaa");
alert(p.getName());
var p2 = window.Person();
p2.setAge(22);
alert(p2.getAge());
jquery plugin
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {......
window.jQuery = window.$ = jQuery;
$ 是jQuery fn 是prototype ()() 闭包执行 (functio($){})($) 传入$执行函数
(function($){
$.fn.myextends=function(json){
for(var i in json){
$.fn[i]=json[i];
}
}
})($)
$().ready(function(){
$.fn.myextends({
a:function(){
alert("aaaa");
}
})
$("body").a();
})
5、函数说明
var F1=function(){}
function F2(){
alert(1);
}
var f3=new F2();
alert(typeof(F1));
alert(typeof(F2));
alert(typeof(f3));
F2();
匿名函数
(function(i){
alert(i);
})(11);
var f=function(i){
alert(i);
};
f(22);
alert(typeof(f));
function F(i){
alert(i);
}
var f2=new F(33);
alert(typeof(f2));
F(55);
function F1(){
alert("function declaration 1");
}
var f2=new function(){
};
function Fun3(){
alert("function Fun3");
}
var f31=new Fun3();
f31;
var f32=Fun3;
alert("typeof(f32)--"+typeof(f32));
f32();
alert(f32);
var f4=function(){
alert("function expression 4");
};
function F1(){
alert("F1");
}
var f2=function(){
alert("F2");
};
(function F3(){
alert("F3");
})();
!function F31(){
alert("!!");
}();
+function F32(){
alert("++");
}();
-function F33(){
alert("--");
}();
var f3=function(){
alert("F4");
}();
函数调用的三种方式:
obj.myFunc();
myFunc.call(obj,arg);
myFunc.apply(obj,[arg1,arg2..]);
call和apply可以用来重新定义函数的执行环境,也就是this的指向。通过一个操作DOM的例子来理解。
function changeStyle(attr, value){
this.style[attr] = value;
}
var box = document.getElementById('box');
window.changeStyle.call(box, "height", "200px");
call中的第一个参数用于指定将要调用此函数的对象,在这里,changeStyle函数将被box对象调用,this指向了box对象,如果不用call的话,程序报错,因为window对象中没有style属性。
apply的用法:
window.changeStyle.apply(box, ['height', '200px']);
call用来调用另一个对象的方法,但调用的对象是可以作为参数传入的。
function A(name){
this.name=name;
this.showName=function(){
alert(this.name);
}
}
function B(name,age){
this.name=name;
this.age=age;
}
var a=new A("aaa");
var b=new B('bbb',10);
a.showName.call(b);
call最经典的应用就是继承。javascript是没有对象继承概念的,我们只能用一些方法实现。
function A(name){
this.name=name;
this.showName=function(){
alert(this.name);
}
}
function B(name,age){
A.call(this,name);
this.age=age;
}
var b=new B('bbb',10);
b.showName();