指南Q?Q用jquery开始吧
q个指南是对jquery库的一个ȝ介绍Q当然你也被要求具备javascript和DOMQ文档对象模型)的相关知识。该指南试图解释一些必ȝl节。它늛了一个简单的”hello world”实例Q选择器和事g基础QAJAXQFX以及官方插g?br />
q个指南q没?#8221;click me”Q而是依靠”copy me”Q复?_脓代码Q来试例子Q拷贝一个例子,看它是怎么做的Q然后根据你自己的想法修改它?br />
目录Q?br />
1Q?nbsp; 安装
2Q?nbsp; Hello jQuery (look like hello world)
3Q?nbsp; 用选择?selector)和事?events)
4Q?nbsp; 用ajax
5Q?nbsp; 用FX(各种效果)
6Q?nbsp; 用tablesorter 插g
7Q?nbsp; 书写你自q插g
8Q?nbsp; 下一步(展望Q?br />
1.安装
开始之前,我们需要一个jquery库的拯(js文g)。最新的版本你能?a target="_blank">
q里下蝲。这个指南也提供了一个基本的“开始工具包”Q你可以在下面地址下蝲到?br />
Jquery starterkit
下蝲该文件ƈ且解压羃。用你喜Ƣ的~辑器(比如Q记事本Q打开starterkit.htm和custom.jsQƈ在浏览器QIEQfirefox, netscapeQ打开starterkit.htm
现在我们可以开始类g“hello world”的例子了?br />
2.Hello ,jQuery
作ؓ我们要做的每一件事情,需要确定只要用Cdom,那么你就应该为当前文档注册一个ready 事g
(关于ready和onload的区别,大家可以参考<蛀译?
jQuery单指?部分Q,在这里就不解释了)
$(document).ready(function() {
// do stuff when DOM is ready
});
在函数块里边放一个alertq没多少意义Q因Z个alertq不需要DOM被加载。所以你可以做一些更复杂的事情来用到domQ比如下面当你click一?lt;a>的时候显CZ个alert
$(document).ready(function() {
$("a").click(function() {
alert("Hello world!");
});
});
所以只要你?lt;a>标签Qalert׃昄出来?br />
让我们看一看都做了些什么吧?(“a”)是一个jquery的选择器(selectorQ?它能选择所有的元素Qdom对象Q?是一个jquery里对于类的别名,因此$()构造了一个新的jquery对象。Click()函数是对象里的有个方法。它l定了对所有元素的click事gq且当事件发生时执行提供的函数?br />
cM于下面的代码Q?br />
<a href="#" >Link</a>
q个区别是显而易见的Q我们不需要ؓ单一的对象写click事g了。我们把html(l构)和jsQ行为)分开了就象用CSS分开一栗?br />
现在Q我们已l对选择器和事g有了一定的认识了?br />
3.选择?selector)和事?events)
Jquery提供?个方法来选择DOM元素。第一个方法是用CSS和XPATHQ比如:$(“div > ul a”)Q。第二种Ҏ是用jQuery对象的各U方法。当然两U方法也可以l合?br />
我们在starterkit里选择和修改第一个order list来测试这些选择器?br />
开始之前,我们需要选择列表本n。这个列表有一个ID=” orderedlist”Q在l典javascript里,你必这LQdocument.getElementById("orderedlist"),但是在jQuery里,我们只需要做q些Q?br />
$(document).ready(function() {
$("#orderedlist").addClass("red");
});
q个starterkit提供了一个如何加CSS样式 class.red。因此,当你hstarterkit.htm的时候,你会发现W一个list背景变成U色Q而第二个list没有被改变?br />
现在让我们加更多的classes到list的子元素Q?br />
$(document).ready(function() {
$("#orderedlist > li").addClass("blue");
});
上面的例子选择了id为orderedlist的所有子标签li,q且在他们上面加了一个class.blue的样式?br />
现在来点更复杂的。当鼠标Udli元素的时候,增加和删除一个Class样式Q?br />
$(document).ready(function() {
$("#orderedlist li:last").hover(function() {
$(this).addClass("green");
}, function() {
$(this).removeClass("green");
});
你在q里可以扑ֈ很多CSS和XPATH的语法?br />
更多的例子和表达式你也可以在q里扑ֈ?br />
对于每个onxxx事gQ象onclick,onchange,onsubmit{,都有一个和jquery同意义的对应的事Ӟ而其他事Ӟ象ready,hover{,都是为某个方法提供?br />
你能在visual jquery里发C个完整的事g列表?br />
q有U写法是jqueryҎ的(chainQ,是把一个选择器的所有的事gq排列出来,中间?#8221;.”隔开Q?br />
$(document).ready(function() {
$("#orderedlist").find("li").each(function(i) {
$(this).html( $(this).html() + " BAM! " + i );
});
});
一个你l常面对的Q务是在事仉Ҏ行函数。比如这?br />
$(document).ready(function() {
// use this to reset a single form
$("#reset").click(function() {
$("#form")[0].reset();
});
});
q个代码只是ID为form的表单执行reset()Ҏ。但是万一你有很多个表单需要执行呢Q那么你可以q样写:
$(document).ready(function() {
// use this to reset several forms at once
$("#reset").click(function() {
$("form").each(function() {
this.reset();
});
});
});
另外一个你必须面对的问题是选择某个或某几个元素。Jquery提供了filter()和not()Ҏ。当filter()是过滤一些适合filter()表达式元素,而not()是删除和not()表达式相反的元素。当你想选择所有的li元素Qƈ且不包含ul子元素呢Q你可以q样写:
$(document).ready(function() {
$("li").not("[ul]").css("border", "1px solid black");
});
l果是除了包含ul子元素的liQ其他所有的li都得C一个border.可能你也想选择有name属性的anchor(<a>)Q?br />
$(document).ready(function() {
$("a[@name]").background("#eee");
});
要匹配属性的|valueQ,我们可以?#8221;*=”来代?#8221;=”
$(document).ready(function() {
$("a[@href*=/content/gallery]").click(function() {
// do something with all links that point somewhere to /content/gallery
});
});
直到现在Q我们已l学C很多选择器的使用。这里还有种情况你需要选择前一个或后一个元素。想一想starterkit.htm里的FAQQ当你click问题的时候,它是怎么实现隐藏和显C的呢?代码是这LQ?br />
$(document).ready(function() {
$('#faq').find('dd').hide().end().find('dt').click(function() {
var answer = $(this).next();
if (answer.is(':visible')) {
answer.slideUp();
} else {
answer.slideDown();
}
});
});
因ؓ上面只有唯一一个选择器(#faqQ?我们用chain来减代码的长度和提高代码的易读性和表现?q里要说明一下,如果按原文翻译过来我惛_多h都看不懂Q感觉他自己也没怎么说明白。我说说我自q理解Q?br />
‘dd’?#8216;dt’都是#faq的子元素Qfind()的作用就是找到它的子元素。End()应该和next()搭配的,end()实质上是?‘dd’qo了,也就是next()的时候实质上是参考的’dt’。这h?#8217;dt’的next是‘dd’Q挺Ҏ实现的。要是还不明白你可以边参考边照着做一遍?br />
除了同属元素外,我们也可以选择父元素:
$(document).ready(function() {
$("a").hover(function() {
$(this).parents("p").addClass("highlight");
}, function() {
$(this).parents("p").removeClass("highlight");
});
});
很容易看懂,p是a的父元素?br />
让我们回一下前面所学的Qjquery有很多地方能使代码更z因此容易读和保持。下面的是?(document).ready(callback)W号的一个简单描q?br />
$(function() {
// code to execute when the DOM is ready
});
好吧Q让我们来写个hello , world ,来结束第一天的评Q相信你一定会写了?br />
$(function() {
$("a").click(function() {
alert("Hello world!");
});
});
现在Q基已经掌握了,下次我们探索一下Jquery的其他方?ajax)
4.Rateing:使用AJAX
在这部分我们写了一个简单的ajax应用Q它的目的是允许用户rateQ评伎ͼ一些事情,pyoutube.com一P
我们需要写一些代码.例子中用C一个php文g来读取"ratingQ的参数和返回rating个数QcountQ和q_rating(array_sum/count)Q你可以看一看starterkit里边的rate.php代码Q?br />
我们需要这个例子工作在ajax上,因此我们用jquery写一个必要的标签q且把它q加C个テQ名?#8221;rating”的div容器里边Q代码如下:
$(document).ready(function() {
// generate markup
var ratingMarkup = ["Please rate: "];
for(var i=1; i <= 5; i++) {
ratingMarkup[ratingMarkup.length] = "<a href='#'>" + i + "</a> ";
}
// add markup to container and applier click handlers to anchors
$("#rating").append( ratingMarkup.join('') ).find("a").click(function(e) {
e.preventDefault();
// send requests
$.post("rate.php", {rating: $(this).html()}, function(xml) {
// format result
var result = [
"Thanks for rating, current average: ",
$("average", xml).text(),
", number of votes: ",
$("count", xml).text()
];
// output result
$("#rating").html(result.join(''));
} );
});
});
上面的代码片断生了Q个<a>元素q且把它们追加到了id?#8221;rating”的div容器里.W一ơ加载页面后Q所有的<a>元素都包含在div容器里,然后再加上个click事g。当<a>被click的时候,一个posth被发送到rate.php文g里,q且通过rating: $(this).html()传递参敎ͼl过处理QͿQ文件处理后把结果作为xml写进div容器
如果你电脑上没装php的运行环境。你可以?a target="_blank">
q里看到q个例子的效果?br />
对与一个不用javascript也能工作的rating例子Q你可以讉K
softonic.de
你也能在
q里或者在
visual jquery里边发现更多的关于ajax的帮助文?br />
当靠QJQ加蝲内容的时候,一个非常普遍的问题是:当加载事件句柄到你文的时候也需要将该事件应用与你加载的内容里,所以你不得不在内容加蝲之后提供q些事g句柄。ؓ了防止代码重复,你应该委z一个函数。例如:
// lets use the shortcut
$(function() {
var addClickHandlers = function() {
$("a.clickMeToLoadContent").click(function() {
$("#target").load(this.href, addClickHandlers);
});
};
addClickHandlers();
});
上面当DQ准备好后addClickHandlers只应用了一ơ,q且每次用户点一个样式ؓclass. clickMeToLoadContent的时候内容已l完成加载了?br />
请主义函数addClickHandlers被定义成了一个局部变量,而非全局函数Qfunction addClickHandlers() {...}).。请坚持q种写法Q因为它可以避免全局变量定义q多引v的冲H?br />
另外一个非常普遍的QJQ回调问题是参数。假设你需要传递一个额外的参数Q那么把回调装C个函数里能够实现Q如下:
// get some data
var foobar = ...;
// specify handler, it needs data as a paramter
var handler = function(data) {
...
};
// add click handler and pass foobar!
$('a').click( function(event) { handler(foobar); } );
// if you need the context of the original handler, use apply:
$('a').click( function(event) { handler.apply(this, [foobar]); });
Q?各种动态效果的实现Q用FX
Jquery能实现简单的动态效果,比如昄QshowQ和隐藏(hide)
// $(document).ready(function() {
$("a").toggle(function() {
$(".stuff").hide('slow');
}, function() {
$(".stuff").show('fast');
});
});
发挥你的惛_Q你能用aninate()创徏L的组合:
// $(document).ready(function() {
$("a").toggle(function() {
$(".stuff").animate({
height: 'hide',
opacity: 'hide'
}, 'slow');
}, function() {
$(".stuff").animate({
height: 'show',
opacity: 'show'
}, 'slow');
});
});
?a target="_blank">
interface 插g攉里,你能发现很多奇特的效果。这个站点也提供一些演C?br />
6.分类Q用表格分类插g
该插件是q行在客L的,所以你只要在你文g里包含jquery和插件的文gq且写出你想如何分类。试试下面的例子。在starterkit.htm里添加下面一行代码:
<script src="lib/jquery.tablesorter.js" type="text/javascript"></script>
把插件包含进dQ你q需要在custom.js里写
$(document).ready(function() {
$("#large").tableSorter();
});
点击表格的头部看看它是怎么工作的?br />
q个表格也能够用高亮隔行昄来实现斑马线效果。代码如下:
$(document).ready(function() {
$("#large").tableSorter({
stripingRowClass: ['odd','even'], // Class names for striping supplyed as a array.
stripRowsOnStartUp: true // Strip rows on tableSorter init.
});
});
q里有更多的例子和演C在
tablesorter homepage
当你用jquery久了之后会发现把你的代码Q功能模块)作ؓ插g装在一个包是多么有用,不仅你自己或你的公司能重用这些代码(功能模块Q,也能在一些社区里׃n。下面我们将来看看如何构造一个插Ӟ
7.插gQ写你自qjquery插g
其实为jquery写插件是很简单的。如果你按照下面的规则,整合你的插g非常容易?br />
Q.l你的插件命名。让我们叫它”foobar”
Q.创徏一个文件名为:jquery.[你的插g名].js 比如Qjquery.foobar.js
Q.扩展jquery的内部对象,创徏一个或多个插g的方法,比如Q?br />
jQuery.fn.foobar = function() {
// do something
});
Q.用帮助函数创Z个对象(可选)
jQuery.fooBar = {
height: 5,
calculateBar = function() { ... },
checkDependencies = function() { ... }
};
然后你能在你的插仉边调用这些帮助函?br />
jQuery.fn.foobar = function() {
// do something
jQuery.foobar.checkDependencies(value);
// do something else
};
Q.创徏一个用戯修改的默认的讄Q可选)
jQuery.fn.foobar = function(options) {
var settings = {
value: 5,
name: "pete",
bar: 655
};
if(options) {
jQuery.extend(settings, options);
}
};
然后你能用下面的默认调用该插Ӟ有选项Q?br />
$("...").foobar({
value: 123,
bar: 9
});
如果你要发布你的插gQ你应该提供一些例子和演示?br />
现在你有一个基本的认识了吧Q让我们q用自己的知识和创造力来写我们自己的插?br />
有很多朋友操作表单这hl束代码Q?br />
$("input[@type='checkbox']").each(function() {
this.checked = true;
// or, to uncheck
this.checked = false;
// or, to toggle
this.checked = !this.checked;
});
h意,无论什么时候,当你的代码出现eachӞ你应该重写上面的代码来构造一个插件如下:
$.fn.check = function() {
return this.each(function() {
this.checked = true;
});
};
于是插g可以q样用:
$("input[@type='checkbox']").check();
现在你也能写一些插件ؓuncheck()和togglecheck()Q但是我们可以扩展插件来接收一些选项Q?br />
$.fn.check = function(mode) {
var mode = mode || 'on'; // if mode is undefined, use 'on' as default
return this.each(function() {
switch(mode) {
case 'on':
this.checked = true;
break;
case 'off':
this.checked = false;
break;
case 'toggle':
this.checked = !this.checked;
break;
}
});
};
然后用户能够q么使用Q?br />
$("input[@type='checkbox']").check();
$("input[@type='checkbox']").check('on');
$("input[@type='checkbox']").check('off');
$("input[@type='checkbox']").check('toggle');
8.下一步(展望Q?/font>
如果你计划学习更多的javascriptQ你应该考虑用firefox?a target="_blank">
firebug插g来调试你的代码.它ؓjavascript的调试提供了一个控制台Q一个调试器和其他有用的东西Q?br />
如果你有M问题不能解决Q请l我们发邮g
jQuery mailing list.
声明Q本站作品均由Jquery中国组译Q制作.无Q何商业用途(不允许拿本站内容做Q务商业行为,q者追I法律责任)Q允许{载,但须说明出处Q?/font>