在上一篇教程——《mootools 1.2教程(2)——dom选择器》中,我们介绍了一下选择器,其中有很多方法就会返回数组(一个你可以对其中内容进行多种操作的特殊列表)。今天,我们在来看看如何使用数组来管理dom元素。
基本方法
.each();
在处理数组时,.each();方法是你最好的朋友。它提供了一种很容易的方法来遍历数组的每个元素,如果有需要还可以对其中的元素进行任何逻辑处理。例如,我们可以假设你需要为页面中的每个div对象调用alert方法:
参考代码:
- $$('div').each(function() {
- alert('a div');
- });
如果使用下面的html代码,上面的javascript代码将弹出两个alert对话框,每个div一个。
参考代码:
- <div>one</div>
- <div>two</div>
.each();方法不需要你使用$$方法。创建一个数组的另一种方式(就像我们昨天讲到过的)是使用.getelements();方法。
参考代码:
- $('body_wrap').getelements('div').each(function() {
- alert('a div');
- });
参考代码:
- <div id="body_wrap">
- <div>one</div>
- <div>two</div>
- </div>
还有另外一种方法来完成这个相同的任务,就是把这个数组赋值给一个变量,然后对那个变量使用.each();方法:
参考代码:
-
-
-
- var myarray = $('body_wrap').getelements('div');
-
-
- myarray.each(function() {
- alert('a div');
- });
最后,如果你可能想把你的函数从选择器中独立出来。我们会在明天的关于使用函数的教程中更深入地讲解这个问题。不过,现在我们可以创建一个非常简单的示例:
参考代码:
- var myarray = $('body_wrap').getelements('div');
-
-
-
-
- var myfunction = function() {
- alert('a div');
- };
-
-
- myarray.each(myfunction);
注意:当你像刚才那样在.each();.方法里面调用函数时,你不需要给函数名加上引号。
复制一个数组
$a
mootools提供了一个简单的方式——通过$a函数来复制一个数组。让我们像刚才那样使用变量创建一个数组:
参考代码:
-
- var myarray = $('body_wrap').getelements('div');
复制一个数组(创建该数组的副本):
参考代码:
-
- var mycopy = $a(myarray );
从数组中获取指定的元素
.getlast();
.getlast();方法返回数组中最后一个元素。首先我们建立一个数组:
参考代码:
- var myarray = $('body_wrap').getelements('div');
现在我们可以从这个数组中获取最后一个元素:
参考代码:
- var lastelement = myarray.getlast();
变量lastelement现在的值就是数组myarray中的最后一个元素了。
.getrandom();
和.getlast();一样,不过它随机从数组中取得一个元素:
参考代码:
- var randomelement = myarray.getrandom();
变量randomelement现在的值就是从数组myarray中随机选取的一个元素了。
向数组中添加一个元素
.include();
通过这个方法,你可以给数组添加另外一个元素。只要把元素选择器传给.include();方法,它就会包含到你的数组中。我们使用下面的html代码:
参考代码:
- <div id="body_wrap">
- <div>one</div>
- <div>two</div>
- <span id="add_to_array">add to array</span>
- </div>
我们可以像以前那样调用”body_wrap“下面的所有div一样来创建一个数组:
参考代码:
- var myarray = $('body_wrap').getelements('div');
要把另外一个元素添加到这个数组中,首先你需要把这个元素赋值给一个变量,然后使用include方法:
参考代码:
-
- var newtoarray = $('add_to_array');
-
-
- myarray.include(newtoarray);
现在,这个数组就同时包含div和span元素了。
.combine();
和.include();方法一样,不过它可以让你把一个数组添加到一个已经存在的数组中,而不用担心有重复的内容。假设我们现在从下面的html中取得了两个数组:
参考代码:
- <div id="body_wrap">
- <div>one</div>
- <div>two</div>
- <span class="class_name">add to array</span>
- <span class="class_name">add to array, also</span>
- <span class="class_name">add to array, too</span>
- </div>
我们可以这样建立两个数组:
参考代码:
-
- var myarray= $('body_wrap').getelements('div');
-
-
- var newarraytoarray = $$('.class_name');
现在我们可以使用.combine();方法来合并两个数组,这个方法会自己处理重复的元素,因此我们不需要处理:
参考代码:
-
- myarray.combine(newarraytoarray );
现在myarray就包含了newarraytoarray中的所有元素。
代码示例
数组可以让你遍历包含所有项目的列表,并对每个元素执行相同的代码。在这个例子中,注意变量”item“作为当前元素的替代符的使用。
参考代码:
-
- var myarray = $('body_wrap').getelements('.class_name');
-
-
- var addspan = $('addtoarray');
-
- var addmany = $$('.addmany');
-
-
- myarray.include(addspan);
-
- myarray.combine(addmany);
-
-
- var myarrayfunction = function(item) {
-
- item.setstyle('background-color', '#eee');
- }
-
-
- myarray.each(myarrayfunction);
参考代码:
- <div id="body_wrap">
- <div class="class_name">one</div>
- <div>two</div>
- <div class="class_name">three</div>
- <span id="addtoarray">add to array</span>
- <br /><span class="addmany">one of many</span>
- <br /><span class="addmany">two of many</span>
- </div>
延伸学习
这个教程并没有打算涵盖你能对数组做的全部事情,但是希望能够给你一个参考,告诉你mootools提供了一些什么功能。要学习更多关于数组的东西,请仔细阅读这些内容:
- 文档中的数组部分
- 这个页面中有许多关于javascript数组的信息
下载一个包含你开始所需要的所有东西的zip包
包括一个简单的html文件、mootools 1.2核心库、一个外部javascript文件、一个css文件和上面的所有例子。