1. Trang chủ
  2. » Giáo án - Bài giảng

wrox press professional javascript frameworks, prototype yui ext js dojo and mootools (2009)

891 1,1K 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Wrox Press Professional JavaScript Frameworks, Prototype YUI Ext JS Dojo and Mootools (2009)
Tác giả Leslie M. Orchard, Ara Pehlivanian, Scott Koon, Harley Jones
Trường học Wrox
Chuyên ngành JavaScript Frameworks
Thể loại book
Năm xuất bản 2009
Định dạng
Số trang 891
Dung lượng 6,94 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

What you will learn from this book ● The Prototype framework: handling cross-browser events, manipulating common data functions, simplifying AJAX and dynamic data, and more ● Yahoo!. xxv

Trang 1

Wrox Professional guides are planned and written by working programmers to meet the real-world needs of programmers,

developers, and IT professionals Focused and relevant, they address the issues technology professionals face every day They

provide examples, practical solutions, and expert education in new technologies, all designed to help programmers do a better job

Recommended Computer Book Categories

Web Development JavaScript

ISBN: 978-0-470-38459-6

As the needs and demands of developers have evolved over

the years, so has JavaScript, which boasts a track record

of delivering high-performing and exceptionally impressive

web-user experiences This flexible, dynamic programming

language is increasingly used for serious development on the

web, and several of its tools and projects are being shared in

the form of libraries and frameworks Packed with coverage

of many of the most popular JavaScript frameworks, this

authoritative guide examines how these frameworks can

present unique and varying approaches to a variety of

problems in web development—each of which has its own

pros and cons

This unparalleled team of authors has assembled some of

the most active and popular JavaScript frameworks available

and they walk you through common web development tasks

addressed by each framework, while also examining how the

framework approaches a particular set of tasks In addition,

practical examples and clear explanations demonstrate the

many aspects of contemporary web development and exactly

what the selection of JavaScript frameworks has to offer so

that you can get up and running quickly

What you will learn from this book

● The Prototype framework: handling cross-browser events, manipulating common data functions, simplifying AJAX

and dynamic data, and more

● Yahoo! User Interface (YUI) library: using animation and drag and drop, building user interfaces with widgets,

working with YUI CSS tools, and more

● Ext JS framework: talking with the server, using dataviews and grids, dealing with form controls and validation, and

Who this book is for

This book is for web developers who are eager to explore the benefits of JavaScript frameworks A working knowledge of

HTML, CSS, and JavaScript is required

Orchard Pehlivanian

Koon Jones

Leslie M Orchard, Ara Pehlivanian, Scott Koon, Harley Jones

Professional Professional

Wrox Programmer to ProgrammerTM

Wrox Programmer to ProgrammerTM

Trang 2

Get more out of

Wrox Online Library

Hundreds of our books are available online

through Books24x7.com

Wrox Blox

Download short informational pieces and

code to keep you up to date and out of

trouble!

Chapters on Demand Purchase individual book chapters in pdf format

Join the Community Sign up for our free monthly newsletter at newsletter.wrox.com

Browse Ready for more Wrox? We have books and e-books available on NET, SQL Server, Java, XML, Visual Basic, C#/ C++, and much more!

Contact Us

Trang 3

Introduction xxv

Part I: Prototype 1 Chapter 1: Extending and Enhancing DOM Elements 3

Chapter 2: Handling Cross-Browser Events 23

Chapter 3: Simplifying AJAX and Dynamic Data 33

Chapter 4: Working with Forms 43

Chapter 5: Manipulating Common Data Structures and Functions 53

Chapter 6: Extending Prototype 71

Part II: Yahoo! User Interface Library 89 Chapter 7: Traversing and Manipulating the DOM with YUI 93

Chapter 8: Handling Cross-Browser Events 113

Chapter 9: Using Animation and Drag and Drop 147

Chapter 10: Simplifying AJAX and Dynamic Loading 173

Chapter 11: Building User Interfaces with Widgets (Part I) 189

Chapter 12: Building User Interfaces with Widgets (Part II) 225

Chapter 13: Enhancing Development with the YUI Core 269

Chapter 14: Dealing with Data, Tables, and Charts 291

Chapter 15: Working with YUI CSS Tools 317

Chapter 16: Building and Deploying 329

Part III: Ext JS 335 Chapter 17: Architecture and Library Conventions 337

Chapter 18: Elements, DomHelper, and Templates 351

Continued

Trang 4

Chapter 20: Handling Data and Talking with the Server 395

Chapter 21: DataViews and Grids 415

Chapter 22: Form Controls, Validation, and a Whole Lot More 431

Part IV: Dojo 451 Chapter 23: Enhancing Development with Dojo Core 453

Chapter 24: Manipulating the Dom 473

Chapter 25: Handling Events 499

Chapter 26: Composing Animations 525

Chapter 27: Working with Ajax and Dynamic Data 547

Chapter 28: Building User Interfaces with Widgets 595

Chapter 29: Building and Deploying Dojo 655

Chapter 30: Expanding Dojo 663

Part V: MooTools 689 Chapter 31: Enhancing Development with MooTools 691

Chapter 32: Manipulating the Dom and Handling Events 725

Chapter 33: Simplifying Ajax and Handling Dynamic Data 763

Chapter 34: Building User Interfaces and Using Animation 787

Index 835

Trang 5

JavaScript® Frameworks

Prototype, YUI, Ext JS, Dojo and MooTools

Leslie Michael Orchard Ara Pehlivanian Scott Koon Harley Jones

Wiley Publishing, Inc.

Trang 6

Prototype, YUI, Ext JS, Dojo and MooTools

Copyright © 2009 by Wiley Publishing, Inc., Indianapolis, Indiana

Published simultaneously in Canada

ISBN: 978-0-470-38459-6

Manufactured in the United States of America

10 9 8 7 6 5 4 3 2 1

No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by

any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted

under Sections 107 or 108 of the 1976 United States Copyright Act, without either the prior written

permission of the Publisher, or authorization through payment of the appropriate per-copy fee to the

Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600

Requests to the Publisher for permission should be addressed to the Permissions Department, John Wiley &

Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011, fax (201) 748-6008, or online at http://www

.wiley.com/go/permissions

Limit of Liability/Disclaimer of Warranty: The publisher and the author make no representations or

warranties with respect to the accuracy or completeness of the contents of this work and specifically

disclaim all warranties, including without limitation warranties of fitness for a particular purpose No

warranty may be created or extended by sales or promotional materials The advice and strategies contained

herein may not be suitable for every situation This work is sold with the understanding that the publisher is

not engaged in rendering legal, accounting, or other professional services If professional assistance is

required, the services of a competent professional person should be sought Neither the publisher nor the

author shall be liable for damages arising herefrom The fact that an organization or Web site is referred to in

this work as a citation and/or a potential source of further information does not mean that the author or the

publisher endorses the information the organization or Web site may provide or recommendations it may

make Further, readers should be aware that Internet Web sites listed in this work may have changed or

disappeared between when this work was written and when it is read

For general information on our other products and services please contact our Customer Care Department

within the United States at (877) 762-2974, outside the United States at (317) 572-3993 or fax (317) 572-4002

Wiley also publishes its books in a variety of electronic formats Some content that appears in print may not

be available in electronic books

Library of Congress Control Number: 2009932978

Trademarks: Wiley, the Wiley logo, Wrox, the Wrox logo, Wrox Programmer to Programmer, and related

trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc and/or its affiliates, in the

United States and other countries, and may not be used without written permission JavaScript is a

registered trademark of Sun Microsystems, Inc All other trademarks are the property of their respective

owners Wiley Publishing, Inc., is not associated with any product or vendor mentioned in this book

Trang 7

me over the last few years’ adventures — of which writing a book was

the least stressful, relatively speaking.

—Leslie Michael Orchard

For my wife, Krista, my daughter Emma, and the new one who’s on the way!

Thanks for your love and support I couldn’t have done this without you!

Trang 9

Leslie Michael Orchard is a tinkerer, writer, and serial enthusiast from the Detroit area He shares his home with a lovely wife, two spotted Ocicats, and a pair of dwarf bunnies On rare occasions when spare time is found, he shares and documents odd bits of code and other interests at a web site called

0xDECAFBAD (http://decafbad.com)

Ara Pehlivanian has been working on the Web since 1997 He’s been a freelancer, a webmaster, and most recently, a front-end architect and practice lead for Nurun, a global interactive communications agency Ara’s experience comes from having worked on every aspect of web development throughout his career, but he’s now following his passion for web standards-based front-end development When he isn’t teaching about best practices or writing code professionally, he’s maintaining his personal site at

http://arapehlivanian.com/

Scott Koon has been a professional software developer for over 13 years He spent the majority of his time in college working with a legacy, undocumented symbolic language (DNA), resulting in a degree in biochemistry He’s been writing JavaScript since it was called LiveScript and remembers when Netscape had a big purple “N” in the upper right-hand corner He maintains a blog at http://lazycoder.com

and has been active in the weblogging community for about 10 years He is often on Twitter at http://www.twitter.com/lazycoder and has contributed to the development of a WPF NET Twitter client called Witty He also cohosts a podcast called Herding Code (http://www.herdingcode.com) that deals with a wide variety of issues in technology He lives in Seattle, Washington, with his wife and two daughters, adrift in a sea of pink princesses and other girly things

Harley Jones is currently a lead technical consultant for Perficient, Inc (NASDAQ: PRFT) He graduated from Oglethorpe University in Atlanta, Georgia with an English literature degree but has been

programming since he was 10 years old He has been developing software professionally for more than

10 years and literally consumes programming languages He actively supports and mentors almost anyone serious in learning modern programming techniques When not programming, he can be found molding his children into evil scientists Harley can be reached at harley.333@gmail.com

Trang 10

From Leslie Michael Orchard: This book owes its existence to the Dojo and MooTools communities

themselves for the wealth of open source code and resources made available to the Web, as well as

answers to random late night questions on IRC

From Ara Pehlivanian: Thanks to the entire YUI team for writing such a great library In particular,

I want to thank Eric Miraglia, Dav Glass, Nate Koechley, Douglas Crockford, and Todd Kloots for

answering my questions and helping me get my brain wrapped around certain issues I also want to

thank the hardworking folks at Wrox for their patience and dedication to putting together a

quality product

From Scott Koon: Thanks to the editors of my chapters for all their help and guidance Without them,

you’d need the Rosetta Stone to read my writing I also want to thank Brendan Eich for creating this

small but powerful language, all of the browser vendors for making JavaScript the most used

programming language in the world, and Douglas Crockford for illuminating just how powerful

JavaScript is and where there be dragons in JavaScript

From Harley Jones: Thanks to Ryan Duclos for putting my name in the hat, Jim Minatel for getting the

ball rolling, and definitely Kenyon Brown and Scott Meyers for pushing that ball through to the finish

I also want to thank Jack Slocum and Aaron Conran for an awesomely powerful library And I thank

Michael LeComte, Nickolay Platonov, Jozef Sakalos, Nigel White, and the entire Ext community (way

too many to list here) for being a sounding board for any and all ideas

Trang 11

Introduction xxv

Part I: Prototype

Chapter 1: Extending and Enhancing DOM Elements 3

Extending a DOM element 3

Altering Page Content 12

Working with CSS and Styles 17

Extending an Element with Your Own Methods 21

Trang 12

Chapter 2: Handling Cross-Browser Events 23

Registering Event Handlers 23

Chapter 3: Simplifying AJAX and Dynamic Data 33

Making Requests to a Server 34

Chapter 4: Working with Forms 43

Manipulating Form Elements and Data 43

Validating Form Data 49

Submitting a Form Using AJAX 52

Chapter 5: Manipulating Common Data Structures and Functions 53

Enhancing Native Objects and Introducing Classes 53

Munging and Parsing Strings 56

Generating Templated Content 59

Template.evaluate() 59

Trang 13

Binding and Manipulating Functions 60

Improving Arrays, Hashes, and Iterators 63

Part II: Yahoo! User Interface Library

Chapter 7: Traversing and Manipulating the DOM with YUI 93

Traversing the DOM and Finding Elements 93

getElementsByClassName 94 getFirstChild/getLastChild 95 getFirstChildBy/getLastChildBy 96 getChildren/getChildrenBy 97

getAncestorByTagName 100 getAncestorByClassName 102

Trang 14

Chapter 8: Handling Cross-Browser Events 113

Registering Events on Page and Element Readiness 113

Working with Custom Events 136

Managing Browser History and Fixing the Back Button 141

Summary 145

Chapter 9: Using Animation and Drag and Drop 147

Composing Basic Animation Sequences 148

Trang 15

Scroll 154

Smoothing Animation Paths and Motion 159

Interactive Animation with Drag and Drop 167

Summary 172

Chapter 10: Simplifying AJAX and Dynamic Loading 173

Making HTTP Requests and Fetching Data 173

Chapter 11: Building User Interfaces with Widgets (Part I) 189

Using AutoComplete with Form Fields 190

Building Containers for Content 195

Chapter 12: Building User Interfaces with Widgets (Part II) 225

Wiring up Buttons, Sliders, and Menus 225

Trang 16

Chapter 13: Enhancing Development with the YUI Core 269

Applying Namespaces and Modularity 269

Detecting Browser Environment and Available Modules 282

Chapter 14: Dealing with Data, Tables, and Charts 291

Formatting Dates and Numbers 291

Acquiring Sources of Data 295

Presenting Tabular Data 303

Drawing Charts and Graphs 307

Summary 316

Chapter 15: Working with YUI CSS Tools 317

Establishing Cross-Browser Consistency 317

Getting Control of Typography 320

Building Layouts from Grids 321

Summary 327

Chapter 16: Building and Deploying 329

Shared YUI Files from Yahoo! 329

Shrink and Optimize Loading Times 332

Trang 17

When and Where to Run It 333

Summary 334

Part III: Ext JS

Chapter 17: Architecture and Library Conventions 337

When to Use Ext JS 337 How to Use Ext JS 338

Ext JS’s Event-Based Design 347

Ext.util.Obser vable.addEvents 347 Ext.util.Obser vable.addListener/.on 348 Ext.util.Obser vable.removeListener/.un 349 Ext.util.Obser vable.fireEvent 349 Ext.util.Obser vable.hasListener 349 Ext.util.Obser vable.purgeListeners 349 Ext.util.Obser vable.relayEvents 349 Ext.util.Obser vable.suspendEvents/.resumeEvents 350 Ext.util.Obser vable.capture/.releaseCapture 350

Trang 18

Chapter 19: Components, Layouts, and Windows 373

The Ext JS Component System 374

Panels and Windows 391

Trang 19

Chapter 20: Handling Data and Talking with the Server 395

Getting the Data 396

Ext.data.DataProxy 396 Ext.data.HttpProxy 396 Ext.data.Memor yProxy 400 Ext.data.ScriptTagProxy 401

Remodeling the Data 402

Ext.data.Record 402 Ext.data.DataReader 404

Storing the Data Locally 408

Summary 429

Chapter 22: Form Controls, Validation, and a Whole Lot More 431

Introduction to the Form Controls 431

Ext.form.TextField 434

Ext.form.NumberField 437

Trang 20

Part IV: Dojo

Chapter 23: Enhancing Development with Dojo Core 453

Getting Dojo 453

Sampling Dojo 455

Examining Dojo Core 460

Summary 472

Trang 21

Chapter 24: Manipulating the DOM 473

Finding DOM Elements 474

Handling Lists of DOM Elements 477

Summary 497

Chapter 25: Handling Events 499

Reacting to Page Load and Unload 500 Connecting to DOM Events 501

Connecting to Methods 507 Making Connections with NodeLists 509 Publishing and Subscribing to Event Topics 512

Using Dojo Behaviors 519

Summary 524

Chapter 26: Composing Animations 525

Animating CSS Style Properties 526 Using Fade Transitions 528 Using Wipe Transitions 529 Using Slide Animations to Move Elements 531 Controlling Motion with Easings 533 Chaining Animations in Serial 536 Combining Animations in Parallel 537

Trang 22

Using NodeList Animation Methods 538

Examining Animation Objects 541

Summary 546

Chapter 27: Working with AJAX and Dynamic Data 547

Making Simple Web Requests 548

Handling Web Responses with Deferreds 551

Working with Response Formats 554

Specifying Request Methods 559

Using Request Parameters and Content 565

Augmenting Forms with In-Place Requests 569

Using Cross-Domain JSON Feeds 577

Making Requests with IFrames 583

Summary 593

Chapter 28: Building User Interfaces with Widgets 595

Building and Validating Forms 596

Trang 23

Enforcing Form Validation on Submit 602

Managing Application Layout 619

Creating Application Controls and Dialogs 638

Applying Themes to Widgets 650

Summary 654

Chapter 29: Building and Deploying Dojo 655

Explaining Dojo Builds 655 Finding the Build System 656 Creating a Custom Build Profile 656 Producing a Custom Build 659 Examining and Using a Custom Build 660 Summary 662

Exploring the DojoX Subproject 663 Trying Out Advanced Widgets 664

Trang 24

Employing Advanced Form Validation Helpers 667

Producing Content from Templates 670

Drawing Shapes and Rendering Charts 674

Using Encoding and Crypto Routines 679

Navigating JSON Data Structures 683

Exploring Further DojoX Offerings 686

Summary 687

Part V: MooTools

Chapter 31: Enhancing Development with MooTools 691

Getting MooTools 691

Examining MooTools Core 694

Using Array Extensions 699

Using Hash Data Structures 706

Trang 25

Extending and Combining Hashes 709

Using String Extensions 710

Using Function Extensions 713

Using Object-Oriented Programming 715

Summary 723

Chapter 32: Manipulating the DOM and Handling Events 725

Finding Elements in the DOM 725

Manipulating Styles and Properties 730

Modifying DOM Structure 743

Attaching Listeners and Handling Events 748

Summary 761

Trang 26

Chapter 33: Simplifying AJAX and Handling Dynamic Data 763

Manipulating Browser Cookies 763

Dynamically Loading Page Assets 767

Making Web Requests 772

Summary 786

Chapter 34: Building User Interfaces and Using Animation 787

Composing Animations 787

Using User Interface Widgets 811

Summary 833

Index 835

Trang 27

Intr oduction

JavaScript is the industry standard client-side scripting language that is used in web applications

Professional JavaScript Frameworks: Prototype, YUI, Ext JS, Dojo and MooTools offers an examination of some

of the top JavaScript (JS) frameworks that are available, with practical examples and explanations of what each does best

Over the past few years, there’s been a small renaissance in JavaScript as a language A variety of projects have sprung up to build reusable JS libraries and frameworks — and at this point, a good number of them have matured and shown staying power that they’re worth taking a serious look at and relying on

in professional projects

JavaScript has grown in popularity in parallel with the Web and today is supported by all major browsers and new web technologies JavaScript has been extended over time to deliver high-performing and incredibly impressive Web user experiences, using technologies including Adobe Flash, AJAX, and Microsoft Silverlight

As JavaScript is used increasingly for “serious” development on the Web, the lessons that have been learned and the tools that have been invented along the way are being consolidated and shared by developers in the form of libraries and frameworks However, since JavaScript is such a flexible and dynamic language, each framework can present very different approaches to the problems of web development — each with its own pros and cons

Whom This Book Is For

This book is for web developers who want to get straight into JavaScript and explore the tools and productivity gains offered by the frameworks A working knowledge of HTML, CSS, and JavaScript are assumed — and also of use will be some experience with object-oriented programming, server-side PHP scripting, and knowledge of web development modern techniques such as AJAX

What This Book Covers

This book is meant to be a concise and handy companion while you’re working, deferring to other sources online and otherwise to fill you in on the more advanced, experimental, and in-progress facets of the JavaScript frameworks

What You Need to Use This Book

A browser, a text editor, and web hosting are pretty much all you need to make use of the examples in this book Using Mozilla Firefox as your browser with the Firebug extension installed is highly recommended, since that combination offers a very powerful in-browser development environment with JavaScript logging and DOM exploration tools

Trang 28

You can download Mozilla Firefox at http://getfirefox.com/ and Firebug is available at http://

getfirebug.com/ once you’ve gotten Firefox running

Additionally, a few examples in this book require a server-side script to fully work, and the example

code is in PHP So, having access to PHP on your web server would help, though the scripts should work

on pretty much any version from PHP 4 and up

Conventions

To help you get the most from the text and keep track of what’s happening, the following conventions

are used throughout the book:

Filenames, URLs, and code within the text are formatted like so: persistence.properties

Code is presented in two different ways:

In code examples, new and important code is highlighted with a gray background

The gray highlighting is not used for code that’s less important in the present

context, or has been shown before

Source Code

As you work through the examples in this book, you may choose to either type in all the code manually

or use the source code files that accompany the book All of the source code used in this book is available

for download at http://www.wrox.com Once at the site, simply locate the book’s title (either by using

the Search box or by using one of the title lists) and click the Download Code link on the book’s detail

page to obtain all the source code for the book

Because many books have similar titles, you may find it easiest to search by ISBN; this book’s ISBN is

978-0-470-38459-6.

Once you download the code, just decompress it with your favorite compression tool Alternately, you

can go to the main Wrox code download page at http://www.wrox.com/dynamic/books/download

aspx to see the code available for this book and all other Wrox books

Errata

We make every effort to ensure that there are no errors in the text or in the code However, no one is

perfect, and mistakes do occur If you find an error in one of our books, such as a spelling mistake or

faulty piece of code, we would be very grateful for your feedback By sending in errata, you may save

other readers hours of frustration and at the same time you will be helping us provide even higher

quality information

Trang 29

To find the errata page for this book, go to http://www.wrox.com and locate the title using the Search box or one of the title lists Then, on the book details page, click the Book Errata link On this page you can view all errata that has been submitted for this book and posted by Wrox editors A complete book list including links to each book’s errata is also available at http://www.wrox.com/misc-pages/

booklist.shtml

If you don’t spot “your” error on the Book Errata page, go to http://www.wrox.com/contact/

techsupport.shtml and complete the form there to send us the error you have found We’ll check the information and, if appropriate, post a message to the book’s errata page and fix the problem in subsequent editions of the book

p2p.wrox.com

For author and peer discussion, join the P2P forums at http://p2p.wrox.com The forums are a Web-based system for you to post messages relating to Wrox books and related technologies and interact with other readers and technology users The forums offer a subscription feature to e-mail you topics of interest of your choosing when new posts are made to the forums Wrox authors, editors, other industry experts, and your fellow readers are present on these forums

At http://p2p.wrox.com you will find a number of different forums that will help you not only as you read this book, but also as you develop your own applications To join the forums, just follow these steps:

1 Go to http://p2p.wrox.com and click the Register link

2 Read the terms of use and click Agree.

3 Complete the required information to join as well as any optional information you wish to provide and click Submit

4 You will receive an e-mail with information describing how to verify your account and complete the joining process

You can read messages in the forums without joining P2P but in order to post your own messages, you must join.

Once you join, you can post new messages and respond to messages other users post You can read messages at any time on the Web If you would like to have new messages from a particular forum e-mailed to you, click the Subscribe to this Forum icon by the forum name in the forum listing

For more information about how to use the Wrox P2P, be sure to read the P2P FAQs for answers to questions about how the forum software works as well as many common questions specific to P2P and Wrox books To read the FAQs, click the FAQ link on any P2P page

Trang 31

Part I

Pr ototype

Chapter 1: Extending and Enhancing DOM Elements

Chapter 2: Handling Cross-Browser Events

Chapter 3: Simplifying AJAX and Dynamic Data

Chapter 4: Working with Forms

Chapter 5: Manipulating Common Data Structures

and Functions

Chapter 6: Extending Prototype

Trang 32

Prototype was one of the first JavaScript libraries to gain prominence during the Web 2.0 resurgence

When the term AJAX was first coined in 2005, making cross - browser XMLHttpRequests was a minefield

of browser - specific code Prototype assists you in your quest for cross - browser compatibility by

smoothing out the rough edges of event handling by providing a common method for binding events to

their respective handlers and providing a common interface for creating AJAX requests that work in all

browsers It also gives you a cross - browser way to manipulate the DOM, by handling the special cases in

all browsers, and allowing you to focus on just writing code without cluttering up your code with

browser - specific “ if - else ” statements

Prototype extends the JavaScript language as well as the elements The native JavaScript Object is

extended to include methods for determining the type of data the object represents as well as helpful

serialization methods The Enumerable class allows you to easily traverse and manipulate your arrays of

both JavaScript objects and DOM elements by providing useful methods such as each() and map()

directly on your arrays The native Function object is also extended with useful methods, such as

wrap() , which let you write interceptors for your methods that provide useful features like logging

Prototype eases inheritance with the Class object You can easily extend your objects and create

hierarchies without the headaches associated with normal inheritance in statically typed languages All

of these features make Prototype the best choice for writing logic in JavaScript, and it provides you with

an excellent base for writing your own JavaScript library Since Prototype does all of the heavy lifting for

you, you can focus on the fun parts of library development — creating new widgets and data structures

Trang 33

Extending and Enhancing

getElementsBySelectors , making it easy to apply styling or events to groups of elements with something in common

In this chapter, you ’ ll learn about:

Extending a DOM element with Prototype Altering and manipulating content and size Using CSS to style an element

Extending a DOM element

Before Prototype came along, cross-browser code often looked a lot like a road map: a lot of branches and a lot of the same checks over and over again By extending the elements you are working on, Prototype is able to centralize all of the cross - browser hacks that make JavaScript programming such a chore Prototype keeps its extension methods for all elements in the

Element.Methods and Element.Methods.Simulated object If the element is an input ,

select , or textarea tag, the methods in Form.Element.Methods are also included Form elements themselves are extended with the methods in Form.Methods Most of these methods return the original element, so you can chain together methods like so: $(myElement)

.update( “ updated ” ).show(); It is important to note that not only is the element you choose extended, but all of the child elements of that element are also extended

Trang 34

In browsers that support modification of the HTMLElement.prototype , Prototype adds the methods to

HTMLElement for you That means you don ’ t have to call Element.extends() on any element you

create by hand You can start using Prototype methods immediately

var newDiv = document.createElement(“div”);

newDiv.update(“Insert some text”);

newDiv.addClassName(“highlight”);

Internet Explorer doesn ’ t support modifying HTMLElement , so you have to call Element.extends() or

get a reference to the element using the $() or $$() methods

$() — “ The dollar function ”

The easiest way to extend a DOM element is to use the $() function to get a reference to the element

rather than using document.getElementById or some other method When you obtain a reference this

way, Prototype automatically adds all of the methods in Element.Methods to the element If you pass a

string to the method, it will get a reference to the element with the ID you specify for you If you pass in

a reference to the element, it will return the same reference but with the extension methods This is the

most common way to extend an element

This works in a similar manner to the $() function It takes a CSS selector as an argument and returns an

array of elements that match the selector CSS selectors are a powerful tool for getting a specific element

back from the DOM The elements in the array will be in the same order as they appear in the DOM and

each will be extended by Prototype

//select all of the input elements with the class “validate”

Prototype does not use the browser ’ s built - in CSS selector parsing, so it is free to implement selectors

specified in newer versions of CSS than the browser supports As a result, version 1.5.1 and higher of

Prototype includes support for almost all of CSS3

Trang 35

a reference for you if you pass it an id

Here is a simple example of using Element.extend() :

Var newDiv = document.createElement(“div”);

< head >

< meta http-equiv=”Content-Type” content=”text/html; charset=utf-8” >

< title > untitled < /title >

< script type=”text/javascript” src=”prototype-1.6.0.2.js” > < /script >

< script type=”text/javascript” >

Event.observe(window,”load”, function(e) { $(“results”).value = “”;

Trang 36

Since $$() returns a DOM - ordered array of elements, you have to refer to the first element in the array

by the ordinal 0

Here you see some of the ways you can extend an element First, you use the $() method to grab the

element by ID and extend the element Next, you use the $$() method and pass in a CSS selector to get

the element by class name Now you will use the Element object as a constructor and create a new H1

element with a class of redText , inserting it into the myDiv element and setting the text of the newly

created element Finally, you create an element the old - fashioned way and use Element.extend() to

extend the element, as shown in Figure 1 - 1

Figure 1 - 1

Trang 37

Navigating the DOM

Trying to figure out where the element you are interested in is located in the DOM and what elements are surrounding that element is no easy task Prototype ’ s Element object provides a multitude of ways

to traverse the DOM Several methods allow you to specify CSS rules to narrow your search All of Prototype ’ s DOM navigation methods ignore white space and only return element nodes

< li class=”female” id=”judy” > Judy < /li >

< li class=”male” id=”sam” > Sam < /li >

< li class=”female” id=”amelia” > Amelia < /li >

< li class=”female” id=”kim” > Kim < /li >

< li class=”male” id=”scott” > Scott < /li >

< li class=”male” id=”brian” > Brian < /li >

< li class=”female” id=”ava” > Ava < /li >

< /ul >

< textarea id=”results” cols=”50” rows=”10” > < /textarea >

< script type=”text/javascript” src=”prototype-1.6.0.2.js” > < /script >

< script type=”text/javascript” >

Event.observe(window,”load”, function(e) { var els =$(“kim”).adjacent(“li.female”);

$(“results”).value = “”;

for(var i = 0;i < els.length; i++) { $(“results”).value += els[i].id + “\n”;

} });

< /script >

< /body >

Here you start with the list element with the ID “ kim ” and gather the li elements adjacent with the class name female , as shown in Figure 1 - 2

Trang 38

ancestors

This collects all of the element ’ s ancestors in the order of their ancestry The last ancestor of any given

element will always be the HTML element Calling this method on the HTML element will just return an

empty array Given the following HTML snippet:

Trang 39

You can use the following code to verify this behavior:

< textarea id=”results” cols=”50” rows=”10” > < /textarea >

< script type=”text/javascript” src=”prototype-1.6.0.2.js” > < /script >

< script type=”text/javascript” >

Event.observe(window,”load”, function(e) { var a = $(‘myParagraph’).ancestors();

$(‘results’).value = “”;

for(var i = 0;i < a.length;i++) { $(‘results’).value += a[i].tagName + “\n”;

} });

< /script >

< /body >

< /html >

up/down/next/previous

These four methods comprise Prototype ’ s core DOM traversal functionality They allow you to define a starting element, and then walk around the DOM at your leisure All of the methods are chainable, allowing you to call each in succession on whatever element was returned by the preceding function If

no element can be found that matches the criteria you define, undefined is returned Each method accepts two arguments: a CSS selector or a numeric index If no argument is passed, the first element matching the criteria is returned If an index is passed, the element at that position in the element ’ s corresponding array is returned For example, the resulting array used for the down() method will match the element ’ s descendants array If a CSS selector is passed in, the first element that matches that rule is returned If both an index and a CSS rule are passed in, the CSS rule is processed first and then the index is used to select the element from the array defined by the CSS rule

Returns the element ’ s siblings that come after the element matching the specified index and/or CSS rule

If no siblings match the CSS rule, all the following siblings are considered If no siblings are found after the element, undefined is returned

Trang 40

previous

Returns the element ’ s siblings that come before the element matching the specified index and/or CSS

rule If no siblings match the CSS rule, all the previous siblings are considered If no siblings are found

before the element, undefined is returned

Take a fragment of HTML that looks like the following example Here you are defining four elements

that relate to each other like this:

< div id=”up” >

< p id=”prevSibling” > I’m a sibling < /p > < div id=”start” > < p id=”down” > Start

Here < /p > < /div > < span id=”nextSibling” > I’m next < /span >

< /div >

This code starts at the start DIV and looks at the previous, next, up, and down elements You start at the

element with the ID start The paragraph element containing the text “ Start Here ” is the first child of

the starting element and is returned by calling the down method The up method returns the topDiv

div The previous method returns the sibling paragraph element and next returns the nextSibling

span , as shown in Figure 1 - 3

< body >

< div id=”up” >

< p id=”prevSibling” > I’m a sibling < /p > < div id=”start” > < p id=”down” > Start

Here < /p > < /div > < span id=”nextSibling” > I’m next < /span >

< /div >

< textarea id=”results” cols=”50” rows=”10” > < /textarea >

< script type=”text/javascript” src=”prototype-1.6.0.2.js” > < /script >

< script type=”text/javascript” >

Event.observe(window,”load”, function(e) {

var startEl = $(‘start’);

var previousEl = startEl.previous();

var upEl = startEl.up();

var downEl = startEl.down();

var nextEl = startEl.next();

var resultTextArea = $(“results”);

resultTextArea.value = “”;

resultTextArea.value += “start =” + startEl.id + “\n”;

resultTextArea.value += “previous =” + previousEl.id + “\n”;

resultTextArea.value += “next =” + nextEl.id + “\n”;

resultTextArea.value += “down =” + downEl.id + “\n”;

resultTextArea.value += “up =” + upEl.id + “\n”;

});

< /script >

< /body >

Ngày đăng: 28/04/2014, 17:15