You are here

Drupal专业开发指南 第17章 你的第一段jQuery代码

g089h515r806 的头像
Submitted by g089h515r806 on 星期一, 2009-08-24 15:22

 

在使用jQuery以前,让我们先做些准备工作.
 
1. 以用户1的身份(管理帐号)登录到你的Drupal站点。
 
2. 导航到“管理➤站点构建➤模块”,启用PHP过滤器模块。
 
3. 创建一个新的Page类型的节点,在节点创建表单上,在“输入格式”下面一定要选择“PHP代码”,如图17-2所示。在标题中输入Testing jQuery,在表单的正文中输入以下内容:
 
<?php
    drupal_add_js(
        '$(document).ready(function(){
            // Hide all the paragraphs.
            $("p").hide();
            // Fade them into visibility.
            $("p").fadeIn("slow");
        });',
        'inline'
    );
?>
 
<p id="one">Paragraph one</p>
<p>Paragraph two</p>
<p>Paragraph three</p>
 
         点击提交,这样就重新加载了页面。你创建的3个段落将慢慢的渐显出来。酷吧?刷新页面,再看一遍,让我们进一步学习一下这个例子。
 
17-2.使用PHP过滤器来做jQuery实验
 
    jQuery代码包含在文件misc/jquery.js中。并不是为Drupal中的每个页面都加载这个文件。只有在调用了方法drupal_add_js()时,才加载它。这里向drupal_add_js()传递了两个参数。第一个参数是一段你希望执行的JavaScript代码,第二个参数“inline”则用来告诉Drupal将代码写入到文档的<head>元素中的<script></script>标签里面。
 
注意 我们这里只是很简单的使用了drupal_add_js(),它还有许多高级的用法,你可以参看http://api.drupal.org/api/function/drupal_add_js/6
 
    让我们更仔细的看看这段JavaScript jQuery代码。
 
$(document).ready(function(){
    // Hide all the paragraphs.
    $("p").hide();
    // Fade them into visibility.
    $("p").fadeIn("slow");
});
 
    第一行代码需要详细的解释一下。当浏览器显示一个页面时,它会到达一个点----它接收到了HTML并完全的解析了页面的DOM结构。接下来的步骤就是显示DOM,这包括加载附加的本地文件(可能还有远程文件)。如果在生成DOM以前,你想尝试执行JavaScript代码,由于代码想要操作的对象还不存在,那么它可能就会抛出错误并停止运行。JavaScript程序员一般使用下面的代码(或其变体)来处理这种情况:
 
window.onload = function(){ ... }
 
         使用window.onload的缺点是,它需要完全加载所有的附加文件,这可能需要等待很长的时间。另外这种方式的局限性还有,在这里只能使用一个函数。为了解决这两个问题,jQuery有一个简单的语句供你使用:
 
$(document).ready(function(){
// Your code here.
});
 
         在生成了DOM以后,就立即执行$(document).ready()。由于前面所列的原因,你通常需要把你的jQuery代码封装在前面的语句中。function()调用在JavaScript中定义了一个匿名函数----在这里,包含了你想要执行的代码。
 
    好了,让我们看一下代码的中心内容,此时应该就不言自明了:
 
// Hide all the paragraphs.
$("p").hide();
// Fade them into visibility.
$("p").fadeIn("slow");
 
       前面的代码找出了所有的段落标签,隐藏它们,并在页面内部慢慢的把它们显示出来。用jQuery的行话来说,fadeIn()部分就是一个方法
 
注意 我们修改的是所有的段落标签,所以如果你访问一个节点列表页面,比如http://example.com/?q=node,你将发现所有的段落标签都受到了影响,而不仅仅是来自于你测试页面的摘要中的段落。在我们的例子中,可以通过修改我们的node.tpl.php模板文件,当节点单独显示在一个页面时,使用<div class='standalone'>对其内容进行包装,这样就可以使用$(".standalone > p")来限制段落标签集了。这个查询仅选择位于类.standalone内部的p元素。
 

老葛的Drupal培训班 Think in Drupal

Drupal版本: