Mootools 1.2教程(2) DOM选择器


Posted in Javascript onSeptember 14, 2009

如果你还没有准备好,请先阅读上一篇《Mootools 1.2教程(1)——MooTools介绍》。我们讲了怎么引用MooTools 1.2以及怎么在domready里面调用你的脚本。
今天开始本系列教程的第2讲。在这一讲中,我们会学习几种选择HTML元素的方法。在许多方面,这是MooTools用得最多最基本的。毕竟,要创建一个基于HTML元素的交互性用户体验,你必须首先把它们掌握在手中。
基本的方法
$();
$函数是MooTools中基本的选择器。你可以通过它来根据一个ID选择DOM元素。
参考代码:

// 选择ID为”body_wrap“的元素 
$('body_wrap');

参考代码:
<div id="body_wrap"> 
</div>

.getElement();
.getElement();扩展了$方法,可以让你简化你的选择操作。例如,你可以通过$方法来选择ID为”body_wrap“的元素,然后选择第一个子节点。.getElement();只选择一个元素,如果有多个符合要求的元素则返回第一个元素。如果你给.getElement();方法一个CSS类名作为参数,你就会得到第一个有这个CSS类名的元素,而不是函数所有元素的数组。要选择多个元素,则可以使用下面的.getElements();方法。
参考代码:
// 选择ID为”body_wrap“的元素下面的第一个链接 
$('body_wrap').getElement('a'); 
// 选择ID为”body_wrap“的元素下面的ID为”special_anchor“的元素 
$('body_wrap').getElement('#special_anchor'); 
// 选择ID为”body_wrap“的元素下面第一个CSS类名为”special_anchor_class“的元素 
$('body_wrap').getElement('.special_anchor_class');

参考代码:
<div id="body_wrap"> 
<a href="#">anchor</a> 
<a href="#">another anchor</a> 
<a id="special_anchor" href="#">special anchor</a> 
<a class="special_anchor_class" href="#">special anchor</a> 
<a class="special_anchor_class" href="#">another special anchor</a> 
</div>

$$();
$$函数可以可以让你快速选择多个元素,并组成一个数组(一种你可以操作、获取和以任何方式重新排序的列表)。你可以通过标签名(如div、a、img等)、或者ID或者是他们的各种组合来选择多个元素。就像一个读者指出的那样,你可以用$$做很多事情,远远超出我们这里所介绍的。
参考代码:
// 选择这个页面中的所有div 
$$('div'); 
// 选择ID为”id_name的元素和所有的div 
$$('#id_name', 'div');

参考代码:
<div> 
<div>a div</div> 
<span id="id_name">a span</span> 
</div>

.getElements();
.getElements();和.getElement();非常类似,不过它返回所有符合要求的元素,并组成一个数组。你可以想使用.getElement();方法那样使用.getElements();。
参考代码:
// 选择ID为”body_wrap“的元素下面的所有链接 
$('body_wrap').getElements('a'); 
// 选择ID为”body_wrap“的元素下面的所有CSS类名为”special_anchor_class“的子元素 
$('body_wrap').getElements('.special_anchor_class');

参考代码:
<div id="body_wrap"> 
<a href="#">anchor</a> 
<a href="#">another anchor</a> 
<a class="special_anchor_class" href="#">special anchor</a> 
<a class="special_anchor_class" href="#">another special anchor</a> 
</div>

用运算符包含和排除结果
运算符
MooTools 1.2支持几种运算符,可以让你进一步精简你的选择操作。你可以在.getElements();中使用这些运算符来包含或者排除特定的结果。MooTools支持4种运算符,每一种都可以用来通过名字(name)选择一个input元素。
= : 等于
参考代码:
//选择name为”phone_number“的input元素
$('body_wrap').getElements('input[name=phone_number]');
^= : 以……开始
参考代码:
// 选择name以”phone“开头的input元素
$('body_wrap').getElements('input[name^=phone]');
$= : 以……结束
参考代码:
// 选择name以数字(number)结束的input元素
$('body_wrap').getElements('input[name$=number]');
!= : 不等于
参考代码:
// 选择名字不等于”address“的input元素
$('body_wrap').getElements('input[name!=address]');
参考代码:
<div id="body_wrap">
<input name="address" type="text" />
<input name="phone_number" type="text" /> <!-- 上面的所有示例代码都将选中这个元素 -->
</div>
(Fdream注:input在这里只是作为一个例子,你同样可以使用这种方式选择其他元素,比如div、a等等。)
要使用运算符,你必须首先指定元素的类型(比如这里的input),然后指定你要过滤的属性(比如这里的name),再加上你的 运算符,最后选择你的过滤字符串。
基于元素顺序的选择器
even(偶数选择)
通过这个简单的选择器,你可以选择序号为偶数的元素。注意:这个选择器从0开始计数,因此第一个元素是偶数序的。
参考代码:
// 选择序号为偶数的div
$$('div:even');
参考代码:
<div>Even</div><!-- 上面的代码将选中这个元素 -->
<div>Odd</div>
<div>Even</div><!-- 上面的代码将选中这个元素 -->
<div>Odd</div>
odd(奇数选择)
和even一样,只不过它选择序号为奇数的元素。
参考代码:
// 选择所有序号为奇数的div
$$('div:odd');
参考代码:
<div>Even</div>
<div>Odd</div><!-- 上面的代码将选中这个元素 -->
<div>Even</div>
<div>Odd</div><!-- 上面的代码将选中这个元素 -->
.getParent();
通过.getParent();方法,你可以得到一个元素的父元素(parent)。
参考代码:
// 选择ID为”child_id“的元素的父元素
$('child_id').getParent();
参考代码:
<div id="parent_id"> <!-- 上面的脚本将返回这个元素-->
<div id="child_id">Even</div>
</div>
代码举例
任何MooTools UI开发都是从选择器开始的。这里是一些非常简单的例子,演示了怎么去使用选择器操作DOM元素。
参考代码:
// 设置所有span的背景颜色为#eee
$$('span').setStyle('background-color', '#eee');
// 设置所有序号为奇数的span的背景色为#eee
$$('span:odd').setStyle('background-color', '#eee');
// 设置ID为body_wrap的元素下的所有CSS类名为.middle_spans的span的背景色为#eee
$('body_wrap').getElements('.middle_spans').setStyle('background-color', '#eee');
参考代码:
<div id="body_wrap"> 
<span>Even</span> 
<span class="middle_spans">Odd</span> 
<span class="middle_spans">Even</span> 
<span>Odd</span> 
</div>

下载zip包并尝试一下
这个zip包中包含了一个简单的html文件、MooTools 1.2核心库、一个外部js文件和上面你所看到的例子。

更多学习……

这并不意味着这是MooTools 1.2的选择器的全部功能列表,这仅仅只是帮助你入门,告诉你MooTools给你提供了什么功能。要学习有关选择器的更多东西,请参考下面的文档:

  • 这里有非常多的有关元素(Element)选择器的文档
  • 顺便也可以看一下选择器(Selectors)

MooTools Blog上有关$$选择器的文章

这是mootools.net上非常好的一篇有关$$选择器和介绍它的变化多端的blog文章。通过这个选择器你可以做多到你无法相信的事情,这篇文章很值得一读。

Slickspeed选择器

这里有别人针对MooTools做的一个实验,测量不同的库在选择元素时到底有多快。这对于它本身来说很cool,不过这些选择器的例子非常有价值。这里所有的选择器特性都可以通过$$方法实现。

W3C选择器

MooTools也可以让你利用伪选择器的力量(就像上面的Slickspeed所证明的)。这里是W3C的一篇关于选择器的文章,一定值得读一遍(如果只有选择器的列表对你有用的话)。我不确定MooTools的$$选择器是不是支持这个页面上的每一个单独选择器,但是至少是绝大部分。欢迎大家告诉我有关这方面的更多消息。

Javascript 相关文章推荐
用window.location.href实现刷新另个框架页面
Mar 07 Javascript
用JavaScript实现单继承和多继承的简单方法
Mar 29 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
Aug 12 Javascript
jQuery 源码分析笔记(4) Ready函数
Jun 02 Javascript
JS的replace方法介绍
Oct 20 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
Apr 19 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 Javascript
js实现仿qq消息的弹出窗效果
Jan 06 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
Nov 03 Javascript
Angular在一个页面中使用两个ng-app的方法
Feb 20 Javascript
vue 页面回退mounted函数不执行的解决方案
Jul 26 Javascript
vue iview 隐藏Table组件里的某一列操作
Nov 13 Javascript
MooTools 1.2介绍
Sep 14 #Javascript
IE与Firefox在JavaScript上的7个不同写法小结
Sep 14 #Javascript
JavaScript 函数调用规则
Sep 14 #Javascript
prototype与jquery下Ajax实现的差别
Sep 13 #Javascript
JS 参数传递的实际应用代码分析
Sep 13 #Javascript
javascript类继承机制的原理分析
Sep 12 #Javascript
javascript 类定义的4种方法
Sep 12 #Javascript
You might like
PHP关联数组的10个操作技巧
2013/01/21 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
php截取字符串函数分享
2015/02/02 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
jquery 模拟类搜索框自动完成搜索提示功能(改进)
2010/05/24 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
python类中super()和__init__()的区别
2016/10/18 Python
Python按钮的响应事件详解
2019/03/04 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
给医务人员表扬信
2014/01/12 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
党建工作汇报材料
2014/12/24 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
Python办公自动化PPT批量转换操作
2021/09/15 Python