Java程序员的JQuery基本指南

JQuery是地球上最受欢迎的JavaScript库之一(JavaScript)。在JavaScript诞生之初,它的位置就完全不同了(从此处开始称为 JS )。 jQuery在BarCampNYC上宣布的那天是2006年1月14日。 JS仍然缺少某种东西-浏览器都支持它的一部分,但是为了实现合规性,必须实施许多hack和变通方法。

JQuery随之出现并改变了一切。 jQuery使编写符合浏览器的代码变得非常容易。您可以在没有计算机科学学位的情况下对网页进行动画处理-万岁!十年过去了,jQuery仍然是王者吗,如果您以前从未使用过它,那么您可以使用它做什么呢?

除了精通JavaScript技能之外,您可能还需要阅读一些HTML和CSS教程(如果您也不熟悉它们的话)。

我们之前已经介绍过jQuery,因此本JQuery指南将侧重于实际编码。

入门

您可能熟悉从文档对象模型( DOM )选择ID的JS方式:

document.getElementById('foo');

Well JQuery进一步迈出了这一步。您无需调用其他方法来选择类,ID或多个元素。选择ID的方法如下:

$('#bar');

容易吗?选择几乎所有DOM元素的语法都完全相同。选择类别的方法如下:

$('.baz');

您也可以发挥一些真正的创造力。这会选择中除第一个元素外的所有 td 元素。

$('table td').not(':first');

注意选择器名称几乎完全匹配其CSS对应项。您可以将对象分配给常规 JS变量:

var xyzzy = $('#parent .child');

,也可以使用jQuery变量:

var $xyzzy = $('#parent .child');

美元符号仅用于表示该变量是一个jQuery对象,对复杂项目非常有用。

您可以选择元素的父级:

$('child').parent();

兄弟姐妹:

$('child').siblings();

浏览器准备就绪后,您需要执行代码。操作方法如下:

$(document).ready(function() {    console.log('ready!');});

更多功能

现在,您已经了解了基础知识,让我们继续介绍一些更复杂的内容。给定一个html表:

<table id="cars">  <tr>    <th>Make</th>    <th>Model</th>     <th>Color</th>  </tr>  <tr>    <td>Ford</td>    <td>Escort</td>     <td>Black</td>  </tr>  <tr>    <td>Mini</td>    <td>Cooper</td>     <td>Red</td>  </tr>  <tr id="fordCortina">    <td>Ford</td>    <td>Cortina</td>     <td>White</td>  </tr></table>

假设您要使其他所有行都使用不同的颜色(称为斑马条纹)。现在您可以为此使用CSS了。 >是CSS中定义的类。注意如何不需要类名之前的句号。通常,只有主选择器才需要这些符号。理想情况下,尽管并没什么大用处,但您应该首先使用CSS。

jQuery也可以隐藏或删除行:

$('#fordCortina').hide();$('#fordCortina').remove();

您不必隐藏元素

函数

JQuery函数就像JS。它们使用花括号并可以接受参数。真正有趣的地方是通过回调。回调几乎可以应用于任何jQuery函数。他们指定了一段代码,以在核心操作完成后运行。这提供了巨大的功能。如果它们不存在,并且您编写了期望以线性方式运行的代码,那么JS将在等待上一行代码的同时继续执行下一行代码。回调确保代码仅在原始任务完成后才运行。下面是一个示例:

$('table').hide(function(){    alert('MUO rules!');});

被警告-此代码为每个元素执行警报。如果选择器多次出现在页面上,则会收到多个警报。

您可以将回调函数与其他参数一起使用:

$('tr:even').addClass('even', function(){   console.log('Hello');});

请注意,在右括号。 JS函数通常不需要此代码,但是此代码仍被认为在一行上(因为回调位于方括号内)。

Animation

JQuery可以做到这一点网页动画非常容易。您可以淡入或淡出元素:

$('.fade1').fadeIn('slow');$('#fade2').fadeOut(500);

您可以指定三种速度(慢,中,快)或一个数字来表示速度(以毫秒为单位)(1000ms = 1秒)。您可以为几乎所有CSS元素制作几乎动画。这会将选择器的宽度从当前宽度设置为250px。

$('foo').animate({width: '250px'});

无法设置颜色的动画。您还可以将回调与动画一起使用:

$('bar').animate({height: '250px'}, function(){    $('bar').animate({width: '50px'}});

循环

循环在jQuery中确实发光。 Each()用于遍历给定类型的每个元素:

$('li').each(function() {  console.log($(this));});

您还可以使用索引:

$('li').each(function(i) {  console.log(i + ' - ' + $(this));});

这将打印 0 ,然后 1 ,依此类推。

您还可以使用 each()遍历数组,就像在JS中一样:

var cars = ['Ford', 'Jaguar', 'Lotus'];$.each(cars, function (i, value){    console.log(value);});

请注意称为 value 的额外参数—这是数组元素的值。

值得注意的是 each()有时会比普通JS循环慢。这是由于jQuery执行额外的处理开销。在大多数情况下,这不是问题。如果您担心性能或正在使用大型数据集,请考虑首先使用jsPerf对代码进行基准测试。

AJAX

异步JavaScript和XML或 AJAX 使用jQuery非常简单。 AJAX支持大量的Internet,这是我们在第5部分中介绍的内容。它提供了一种部分加载网页的方法-例如,当您只想更新足球比分时,无需重新加载整个页面。 jQuery有几种AJAX方法,最简单的方法是 load()

$('#baz').load('some/url/page.html');

这将对指定页面执行AJAX调用( some / url / page.html ),然后将数据推送到选择器中。简单!

您可以执行 HTTP GET 请求:

$.get('some/url', function(result) {   console.log(result);});

您也可以使用 POST 发送数据:

$.post('some/other/url', {'make':'Ford', 'model':'Cortina'});

提交表单数据非常容易:

$.post('url', $('form').serialize(), function(result) {    console.log(result);}

serialize()函数获取所有表单数据并为传输做准备。

承诺

承诺用于推迟执行。它们可能很难学习,但是jQuery使其麻烦程度略微降低。 ECMAScript 6向JS引入了原生的Promise,但是,浏览器的支持充其量是不稳定的。目前,jQuery承诺在跨浏览器支持方面要好得多。

一个承诺几乎完全像听起来那样。该代码将保证在完成时稍后返回。您的JavaScript引擎将继续执行其他代码。一旦承诺解决(返回),就可以运行其他一些代码。可以将承诺视为回调。 jQuery文档进行了更详细的解释。

下面是一个示例:

// dfd == deferredvar dfd = $.Deferred();function doThing() {    $.get('some/slow/url', function() {        dfd.resolve();    });    return dfd.promise();}$.when(doThing()).then(function(){    console.log('YAY, it is finished');});

注意如何做出承诺( dfd.promise()),它仅在AJAX调用完成时解决。您可以使用变量来跟踪多个AJAX调用,并且仅在完成所有任务后才完成另一个任务。

性能提示

从浏览器中挤出性能的关键是限制对DOM的访问。这些技巧中的许多技巧也可能适用于JS,并且您可能需要分析代码以查看其速度是否令人无法接受。在当前的高性能JavaScript引擎时代,代码中的小瓶颈通常可能不会引起注意。尽管如此,仍然值得尝试编写性能最快的代码。

而不是在DOM中搜索每个操作:

$('foo').css('background-color', 'red');$('foo').css('color', 'green');$('foo').css('width', '100px');

将对象存储在变量中:

$bar = $('foo');$bar.css('background-color', 'red');$bar.css('color', 'green');$bar.css('width', '100px');

优化循环。给定一个普通的for循环:

var cars = ['Mini', 'Ford', 'Jaguar'];for(int i = 0; i < cars.length; ++i) {    // do something}

虽然天生不是很糟糕,但是可以使该循环更快。对于每次迭代,循环都必须计算cars数组的值( cars.length )。如果将其存储在另一个变量中,则可以提高性能,尤其是在使用大型数据集的情况下:

for(int i = 0, j = cars.length; i < j; ++i) {    // do something}

现在,cars数组的长度存储在 j 中。不再需要在每次迭代中都进行计算。如果使用 each(),则不需要这样做,尽管经过适当优化的原始JS可以胜过jQuery。 jQuery真正的亮点在于开发和调试的速度。如果您不是在处理大数据,那么jQuery通常会更快。

您现在应该了解足以成为jQuery忍者的基础知识!

您是否定期使用jQuery? ?您是否出于任何原因停止使用它?在下面的评论中让我们知道您的想法!

标签: JavaScript jQuery