4.11.2 编程
现在对于想要完成的脚本有了一个概念,是时候打开文本编辑器并完成编程了。
注意:参见1.3节中的“注意”部分了解如何下载教程文件的信息。
1.在文本编辑器中打开chapter04目录下的pull-quote.html文件。
首先,添加到jQuery文件的一个链接。
2.单击结束的</head>标签之上的空行,并且输入:
<script src="../_js/jquery-1.6.3.min.js"></script>
这会从站点加载jQuery文件。注意,包含jQuery文件的文件夹的名称是_js(别忘了开始的下划线)。然后,可以为程序添加一对<script>标签。
3.按下回车键,在jQuery代码下面创建新行,并且添加如下粗体所示的代码:
1<script src="../_js/jquery-1.6.3.min.js"></script>
2<script>
3
4</script>
注意:每行左边的行号只是为了方便引用。不要在Web页面上真的将它们作为脚本的一部分录入。
现在,加入document.ready()函数。
4.单击<script>标签之间的空行,并且添加粗体所示的代码:
1<script src="../_js/jquery-1.6.3.min.js"></script>
2<script>
3$(document).ready(function(){
4
5});//end ready
6</script>
当程序变得很长很复杂的时候,JavaScript注释//end ready特别有用。在一个较长的程序中,最终整个程序中有很多});散落各处,每一个});都标志着一个匿名函数和一个函数调用的结束。放置一个注释来表明该});是和哪一部分相匹配的,这使得你稍后回头来阅读自己的代码的时候更容易理解。
步骤1到步骤4涵盖了使用jQuery编写任何程序的基本过程,因此,确保要理解每一个步骤在做什么。接下来,通过选择包含应该出现在pullquote框中的文本的<span>标签,我们进入程序的核心部分。
5.添加第4行中粗体所示的代码:
1<script src="../_js/jquery-1.6.3.min.js"></script>
2<script>
3$(document).ready(function(){
4$('span.pq')
5});//end ready
6</script>
$('span. pq')是一个jQuery选择器,它查找带有pq类的每个<span>标签。接下来添加遍历每个<span>标签并对它们进行一些操作所需的代码。
6.添加如下第4行和第6行所示的粗体代码:
1<script src="../_js/jquery-1.6.3.min.js"></script>
2<script>
3$(document).ready(function(){4
$('span.pq').each(function(){
5
6});//end each
7});//end ready
8</script>
正如4.10节所介绍的,.each()是一个jQuery函数,允许遍历一个选择的元素。这个函数接收一个参数,它本身也是一个匿名函数。
接下来,开始构建将要应用于页面上每一个匹配的<span>标签的函数:第一步是创建<span>的一个副本。
7.把下面第5行中粗体所示代码添加到脚本中:
1<script src="../_js/jquery-1.6.2.min.js"></script>
2<script>
3$(document).ready(function(){4
$('span.pq').each(function(){5 var quote=$(this).clone();
6
});//end each
7});//end ready
8</script>
这个函数首先创建一个名为quote的变量,它包含当前的<span>(如果忘记了$(this)的含义,请参见4.10.2节)的一个“副本”(只是一个副本)。jQuery的.clone()函数复制了当前元素,包括元素中所有的HTML。在这个例子中,它复制了<span>标签,包括<span>标签中的将要出现在提取引用框中的文本。
复制一个元素会复制所有内容,包括应用于元素的所有属性。在这个例子中,最初的<span>有一个类名pq。我们将从副本中删除该类。
8.把如下第6行和第7行所示的粗体代码添加到脚本中:
1<script src="../_js/jquery-1.6.3.min.js"></script>
2<script>
3$(document).ready(function(){4
$('span.pq').each(function(){
5 var quote=$(this).clone();
6 quote.removeClass('pq');
7 quote.addClass('pullquote');
9});//end ready
10</script>
8});//end each
正如4.8.1节所述,removeClass()函数从标签中删除一个类名,而.addClass()函数为标签添加一个类名。在这个例子中,要替换副本中的类名,以便使用一个名为.pullquote的CSS类来把<span>格式化为提取引用框。
最后,将向页面添加<span>。
9.把如下粗体所示代码(第8行)添加到脚本中:
1<script src="../_js/jquery-1.6.3.min.js"></script>
2<script>
3$(document).ready(function(){
4$('span.pq').each(function(){
5 var quote=$(this).clone();
6 quote.removeClass('pq');
7 quote.addClass('pullquote');
8$(this).before(quote);
9});//end each
10});//end ready
11</script>
这行代码是函数的最后部分,在这行之前,我们一直在操作Web浏览器的内存中<span>的一个副本。浏览页面的人看不到它,直到这个副本真正地添加到DOM中。
在这个例子中,插入的是<span>标签的副本,就在HTML中的那个<span>标签之前。实际上,页面最终的HTML如下所示:
<span class="pullquote">……and that's how I discovered the Loch Ness monster.
</span><span class="pq">……and that's how I discovered the Loch Ness
monster.</span>
尽管从这段内容看上去会紧挨着显示副本,CSS格式化使得提取引用框出现在页面的右边。
注意:要实现提取引用框的视觉效果,页面拥有一个CSS样式,它使用了CSS float属性。框移动到文本所出现的段落的右边,并且由段落中其他的文本包围着它。如果不熟悉这一技术,可以通过http://css.maxdesign.com.au/floatutorial/来了解CSS float属性。如果想要查看.pullquote样式,只要看一下教程文件的头部就行了。该样式及其所有的属性在那里列出。
此时,所有的JavaScript都完成了。然而,我们没有看到任何提取引用框,直到在HTML中给出一些消息。
10.找到页面的H T M L的第一个<p>标签。找到一条句子,并且用<s p a n class="pq"></span>包围它。例如:
<span class="pq">Nullam ut nibh sed orci tempor rutrum.</span>
可以重复这一过程来给其他的段落添加提取引用。
11.保存文件并在Web浏览器中预览它。
最终的结果如图4-7所示。如果没有看到一个提取引用框,确保在步骤10中正确地添加了<span>标签。此外,检查1.6节关于修改有问题的程序的提示。可以在文件complete_pull-quote.html中看到本教程的一个完成版本。