Android分享文稿

Posted on

Android分享文稿

Android分享文稿

作者:张华 发表于:2011-04-06

内容目录

目标 1

1 掀起你的盖头来--Android是什么 1

1.1 Android模拟器 2

1.2 关于Android的八卦 2

1.3 Android架构 2

1.2 Android优势 5

2 工欲善其事,必先利其器--建立Android开发环境 5

2.1 安装JDK 5

2.2 安装Android SDK及AVD Manager 5

2.3 安装 Android eclipse plugin 5

2.4 配置Virtual devices (Android Emulator) 6

3 千里之行,始于足下--Android知识结构 8

3.1 Android界面开发 8

3.1.1 Layout 8

3.1.2 Wiget 8

3.1.3 一些概念 9

3.1.4 Activity屏幕间的跳转 10

3.1.4 使用Droiddraw开发界面 10

3.2 Android数据存储 10

3.3 Android多媒体开发 10

3.4 Android网络通信 10

3.5 与google相关的特色开发 10

4 大学教育的失败在于理论与实践脱节--Android实践 10

4.1 应用工程组成 10

4.2 两个Activity之间的切换 11

目标

作为一个java 程序员,在阅读了本文之后,剩下的就仅是熟悉android 的API 。

1 掀起你的盖头来 --Android 是什么

Android 是 Google 公司于 2007 年 11 月宣布的基于 linux 平台的开源手机操作系统,它包括了操作系统、中间件、用户界面及一些关键应用。

Android 是基于 Java (实际运行在 dalvik 虚拟机上)并运行在 linux 内核上的操作系统。

目前,基于 NDK ,也可以用 C ++、 C 开发 Android 应用 ; 也可以借助一些软件在 Android 平台上跑例如 PHP 之类的脚本程序 ; Android 已经可以安装在上网本上。

1.1 Android 模拟器

启动命令: emulator -debug avd_config -avd avd2.2

1.2 关于 Android 的八卦

开放手机联盟 :

谈到 Android ,有必要首先了解开放手机联盟( Open Handset Alliance) ,它是 Google 公司于 2007 年 11 月宣布组建的一个全球性联盟组织,这一联盟会支持 Android 操作系统及其应用软件,包括手机制造商、手机芯片厂商、移动运营商,建立了整个移动系统的生态环境。

Android 开发大赛 :

Android 的未来关键取决于手机用户多次多彩的应用程序, Google 公司为了吸引更多的开发者参与到 Android 开发中来,于 2008 年 4 月 17 日举办了奖金为 1000 万美元的 Android 开发大赛,推动了 Android 开发的应用速度。我就是那时开始接触 Android 系统的。

Android Market :

Android Market 被定位为开放的内容分享系统,也就是应用程序超市,任何程序员开发的应用程序都可以放在 Android Market 上,供所有的 Android 手机用户下载体验并赚钱。

Android 开发者社区:

Android 开发者社区是: http://www.android.com , 不过由于伟大的长城防火墙的原因一般访问不了。不过你可以上局域网的社区: http://www.eoeandroid.com

1.3 Android 架构

http://blog.csdn.net/quqi99/archive/2007/12/04/1916553.aspx

                              图1-1 Android系统结构图

从图 1-1 可以看出 Android 分为 4 层,从高到低分别是应用层、应用框架层、系统运行库层和 Linux 内核层。下面将对这 4 层进行简要的分析和介绍。

1. 应用层

应用是用 java 语言编写的运行在虚拟机上的程序。 Google 同时也内置了一些核心应用,如 E-mail 客户端、 SMS 短消息程序、日历、地图、浏览器等等。

2. 应用框架层

这一层是开发应用程序可以使用的框架,这样便简化了程序开发的架构设计,但是必须遵守其框架的开发原则。从图 1-1 中可以看出, Android 提供了如下一些组件:

  • 丰富而又扩展的视图( View) :可以用来构建应用程序,如文本框( TextBox )等。
  • 内容提供器( Content Providers ):它可以让一个应用访问另一个应用的数据,或共享它们自己的数据。
  • 资源管理器( Resource Manager ):提供非代码资源的访问,如本地字符串、图形和布局文件( Layout file )。
  • 通知管理器( Notification Manager) :应用可以在状态栏中显示自定义的提示信息。
  • 活动管理器( Activity Manager) :用来管理应用程序生命周期并提供常用的导航退回功能。
  • 窗口管理器( Window Manager ):管理所有的窗口程序。
  • 包管理器( Pakage Manager ): Android 系统内的程序管理。

我们编程过程中,具体可供使用的包有:

  • android.app :提供高层的程序模型和基本的运行环境。
  • android.content :包含对各种设备上的数据进行访问和发布。
  • android.database: 通过内容提供者浏览和操作数据库。
  • android.graphics: 底层的图形库,包含画布、颜色过滤、点、矩形、可以将绘制在屏幕上。
  • android.location: 定位和相关服务的类。
  • android.media :提供一些类管理多种音频、视频的媒体接口。
  • android.net: 提供帮助网络访问的类,超过通常的 java.net./* 接口。
  • android.os: 提供了系统服务、消息传输和 IPC 机制。
  • android.opengl: 提供 OpenGL 的工具。
  • android.provider: 提供访问 Android 内容提供者的类。
  • android.telephony: 提供与拨打电话相关的 API 交互。
  • android.view: 提供基础的用户界面接口框架。
  • android.util: 涉及工具的方法。
  • android.webkit: 默认浏览器操作接口。
  • android.widget: 包含各种 UI 元素,在应用程序的布局中使用。

3. 系统运行库( C/C++ 库以及 Android 运行库)层

当使用 Android 应用框架时, Android 系统会通过一些 C/C++ 库来支持我们使用的各个组件。

  • Bionic 系统 C 库: C 语言标准库,最底层的库, C 库通过 Linux 系统来调用。
  • 多媒体库( Media Framework ):多媒体库,基于 PacketVideo OpenCORE, 该库支持多种常见格式的音频、视频的回放和录制,以及图片,比如 MPEG4 、 MP3 、 AAC 、 AMR 、 JPG 、 PNG 。
  • SGL : 2D 图形引擎库
  • SSL :位于 TCP/IP 协议与各种应用协议之间,为数据通信提供支持。
  • OpenGL ES1.0 : 3D 效果支持
  • SQLite :关系型数据库
  • Webkit : WEB 浏览器引擎
  • FreeType :位图( bitmap )和矢量( vector)

4.Linux 内核层

Android 的核心系统服务基于 Linux2.6 内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。

Android 更多的是需要一些与移动设备相关的驱动程序,主要的驱动如下所示:

  • 显示驱动( Display Driver ):基于 Linux 的帧缓冲驱动。
  • 键盘驱动( KeyBoard Driver ):作为输入设备的键盘驱动。
  • Flash 内存驱动( Flash Memory Driver ):基于 MTD 的 Flash 驱动程序。
  • 照相机驱动( Camera Driver ):常用的基于 Linux 的 v412 (Video for Linux) 驱动
  • 音频驱动( Audio Driver ):常用的基于 ALSA ( Advanced Linux Sound Architecture) 的高级 Linux 声音体系驱动。
  • 蓝牙驱动( Bluetooth Driver ):基于 IEEE 802.15.1 标准的无线传输技术。
  • WiFi 驱动:基于 IEEE 802.11 标准的驱动程序。
  • Binder IPC 驱动: Android 的一个特殊驱动程序,具有单独的设备节点,提供进程间通信的功能。
  • 电源管理( Power Management ):比如电池电量等。

1.2 Android 优势

2 工欲善其事,必先利其器 -- 建立 Android 开发环境

在 Mac 平台中建立 Android 开发环境,需安装下列软件:

  • JDK
  • Android SDK (Dalvik)
  • Eclipse + Android eclipse plugin (ADT, Andorid Developer Tool)

2.1 安装JDK

注意配置JAVA_HOME 环境变量,略。

2.2 安装Android SDK 及AVD Manager

下载地址:http://developer.android.com/sdk/index.html

ANDROID_SDK_HOME=/home/java/android-sdk-mac_86 (由于ADT 有bug 的原因,我们会修改这个环境变量为ANDROID_SDK_HOME=/var/root )

PATH=$ANDROID_SDK_HOME/tools:$PATH

接着运行/home/java/android-sdk-mac_86/tools/android 命令在弹出的如下图的对话框中点击”Install packages” 菜单安装Android SDK 及AVD Manager

                                             图2-1  安装Android SDK

2.3 安装 Android eclipse plugin

Update url: https://dl-ssl.google.com/android/eclipse/

注意,此时一般会报错,这时候,再将 https 换成 http 即可。

                           图 2-2  安装 ADT (android eclipse plugin)

2.4 配置 Virtual devices (Android Emulator)

点击 eclipse 的 window → Android SDK and AVD Manager 菜单,如下图所示:

在弹出的“ Android SDK and AVD Manager“ 对话框的” Virual devices” 面板点击 New 按钮,在弹出的“ Create new Android Virtual Device(AVD) 对话框架按照下图新建一个模拟器。

                                       图 2-3  新建模拟器 AVD

注意,此时如果在 eclipse 中点” Start“ 按钮启动模拟器的话,会报下列错:

emulator: ERROR: unknown virtual device name: 'Froyo'

emulator: could not find virtual device named 'Froyo'

图2-4 在eclipse 新建的AVD 在eclipse 中start 报的错

注意:上述错误是由 ADT 插件的 BUG 所致,虽然我们前面设置了环境变量 ANDROID_SDK_HOME=/home/java/android-sdk-mac_86 , 但是 ADT 仍然傻乎乎地将 AVD 建在了 /var/root 目录下,所以在 eclipse 中启动 AVD 时会报上述错误 。

目前,只能通过下列方法曲线救国(我没有想出更好的解决办法)

1 )重设环境变量 ANDROID_SDK_HOME=/var/root

2 )在eclipse 中新建模拟器(因为要用eclipse 来debug 程序,所以因为路径的bug 我们最好不要在命令行中新建模拟器,而改在eclipse 中新建模拟器)

3 )在命令行中启动模拟器(emulator -debug avd_config -avd avd2.2 , 因为路径的bug 问题不要在eclipse 中启动模拟器)

4 )剩下的调试和普通的eclipse 调试是一模一样的。

另外,注意:模拟器经常会出现error:device offline 的错误,这时候需要重启模拟器。

下面我们列举一些常用的模拟器操作的命令:

  • 列出模拟器类型:android list targets
  • 创建模拟器:android create avd –target 2 –name avd2.2
  • 列出自己创建的模拟器:android list avd
  • 切换模拟器样式:在创建命令后面加上”--skin QVGA” 即可。
  • 删除模拟器:android delete avd -name avd2.2
  • 安装avk 文件:adb install /tmp/myApp.apk
  • 缷载模拟器中的apk 文件,依次输入命令:adb shell, cd data, cd app, ls ,然后再用普通的linux 命令删除即可(注意:android 的底层是基于linux 内核的,文件系统是用linux 的)

3 千里之行,始于足下 --Android 知识结构

想要快速掌握 Android 开发,需要学习一些什么呢?

3.1 Android 界面开发

3.1.1 Layout

类似于 SWT 编程。

  • LinearLayout: 线性布局,一行(列)只能放一个控件。
  • RelativeLayout :相对布局。控件的位置都是相对位置。
  • TableLayout :表单布局。这要和 TableRow 配合使用,很像 HTML 里的 table
  • TabWidget :切换卡,实现标签的切换功能。
  • FrameLayout: 里面只能放一个控件,并且不能设计这个控件的位置,控件会放到左上角。
  • AbsoluteLayout :可以自定义控件的 x,y 的位置。

3.1.2 Wiget

类似于 SWT 编程,常用控件如下:

  • 文本框( TextView)
  • 列表( ListView)
  • 提示( Toast)
  • 编辑框( EditText)
  • 单项选择( RadioGroup, RadioButton)
  • 多项选择( CheckBox)
  • 下拉表列( Spinner)
  • 自动提示( AutoComplete-TextView)
  • 日期与时间( DatePicker, TimePicker)
  • 按钮( Button)
  • 菜单( Menu)
  • 对话框( Dialog)
  • 图片视图( ImageView)
  • 带图标的按钮( ImageButton)
  • 拖动效果( Gallery)
  • 切换图片( ImageSwitcher)
  • 网格视图( GridView)
  • 卷轴视图( ScrollView)
  • 进度条( ProgressBar)
  • 拖动条( SeekBar)
  • 状态栏提示( Notification, NotificationManager)
  • 对话框中的进度条( ProgressDialog)

3.1.3 一些概念

Android 应用程序由 4 个模块组成: Activity, Intent, Content Provider, Service.

  • Activity ,你可以把它看作 JSP ,代表用户所能看到的活动(也就是屏幕啦),但是比 JSP 可能还多些带动作的东西,如监听系统事件(按键事件,触摸屏事件),也用户显示指定的 View, 启动其他的 Activity 等。
  • Intent, Intent 用户 Activity 与 Activity 之间的切换,它包括两个重要的部分:动作和动作对应的数据。典型的动作类型有 MAIN,VIEW,PICK,EDIT 等,而动作对应的数据则以 URI 的形式表示。你可以把它看成是 JSP 页面之间的一次跳转或重定向。如要查看某人的联系方式,需要创建一个动作类型为 VIEW 的 Intent ,以及一个表示这个人的 URI 。有三种类型的 Intent:

1) 通过 Intent 切换屏幕,可以带数据

2 )通过 Intent 来启动一个 Service

3 )通过 Intent 来广播一个事件

  • Intent filter, 如果说 Intent 是一个有效请求,一个 Intent Filter 则用于描述一个 Activity( 或者 Intent Receiver )能够操作哪些 Intent 。例如,一个 Activity 要显示一个人的联系方式时,需要声明一个 Intent Filter ,这个 Intent Filter 要知道怎么去处理 VIEW 动作和表示一个人的 URI ,它一般在 AndroidManifest.xml 中定义。
  • Broadcast intent Receiver 介绍,可以使用 BroadcaseReceiver 来让应用对一个外部的事件做出响应, BroadcaseReceiver 不能生成 UI 对用户是透明的。既可在 AndroidManifest.xml 中定义,也可使用 Content.registerReceiver() 进行注册。各种应用还可以通过使用 Content.sendBroadcast() 将它们自己的 intent broadcasts 广播给其它应用程序。
  • Content Provider, 用于提供内容,如访问数据库。 值得一提的是,在 Android 当数据是应用私有的,而 Content Provider 就是来解决两个应用之间交换数据滴。一个 Content Provider 类实现了一组标准的方法接口(如 query, insert, update, delete) ,从而将自己的数据暴露出去。
  • Service ,是一个生命周期长且没有用户界面的程序。通过 startService(Intent intent) 可以启动一个 Service ,通过 Context.bindService() 可以绑定一个 Service 。

3.1.4 Activity 屏幕间的跳转

Android 程序无外乎就是一个个屏幕的切换,通过解析各种 Intent ,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时, Activity 将会调用 startActivity(Intent myIntent) 方法。然后,系统会在所有已安装的应用程度中定义的 IntentFilter 查找 ,找到最匹配 myIntent 的 Intent 对应的 Activity 。新的 Activity 接收到 myIntent 的通知后,开始运行。

这里假设有两个 Activity ,一个是 A, 一个是 B, 从屏幕跳到屏幕 B ,代码如下所示:

Intent intent = new Intent(A.this, B.class);

startActivity(intent);

3.1.4 使用 Droiddraw 开发界面

可参见文档《 droiddraw + android + vi 可视化设计器》

安装步骤如下:

1 )启动模拟器

android list avd

emulator -debug avd-config -avd avd2.2

2 )下载 AnDroidDraw.apk 并安装它, adb install /tmp/AnDroidDraw.apk

3 )安装端口转发规则: adb forward tcp:6100 tcp:7100

4 )可点击 Generate 生成 XML 布局代码,也可点击“ Project—send GUI to device” 在模拟器上查看效果

3.2 Android 数据存储

采用 SQLLite 嵌入式数据库,略。

3.3 Android 多媒体开发

音乐、视频、相机、闹钟

3.4 Android 网络通信

HTTP 通信可采用:

  • java.net./*
  • com.android./*

Socket 通信

Webkit 应用

WiFi 、蓝牙

3.5 与 google 相关的特色开发

Google Map

4 大学教育的失败在于理论与实践脱节 --Android 实践

4.1 应用工程组成

                                     ![]()
  • src, 源文件
  • gen/R.java, 是 eclipse 自动生成的,是对资源文件的索引, res 目录发生变化,此处会自动更新
  • assets, 放置多媒体
  • res 目录,放资源文件, drawable 子目录放图片资源, layout 子目录放布局文件, values 子目录放置字符串( string.xml )、颜色( colors.xml )、数组( arrays.xml )
  • AndroidManifest.xml, 应用的配置文件,如应用的名称、 Activity 、 Service 以及 reciever 等

4.2 两个 Activity 之间的切换

                          图 新建 Andorid 工程

如上图所示,新建一个名为 AndroidTest 的 android project (注意:上述没给图的步骤直接按默认的下一步就行了)。

代码如下:

main.xml 布局文件是:

<? xml version = "1.0" encoding = "utf-8" ?>

< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

android:orientation = "vertical"

android:layout_width = "fill_parent"

android:layout_height = "fill_parent"

>

< TextView

android:id = "@+id/text"

android:layout_width = "fill_parent"

android:layout_height = "wrap_content"

android:text = "@string/hello"

/>

< Button android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/button" android:text = "Button" ></ Button >

</ LinearLayout >

Androidmanifest.xml 文件要添加:

< activity android:name = ".Activity1" ></ activity >

< activity android:name = ".Activity2" ></ activity >

package com.quqi;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

///

/ *@author huazhang

/ *@date 20110316

/*/

public class AndroidTest extends Activity

{

/// Called when the activity is first created. /*/

@Override

public void onCreate(Bundle savedInstanceState)

{

super .onCreate(savedInstanceState);

setContentView(R.layout. main );

TextView text = (TextView) findViewById(R.id. text );

text.setText( "here is main activity" );

Button button = (Button) findViewById(R.id. button );

button.setText( "next" );

OnClickListener listener = new OnClickListener() {

public void onClick(View v)

{

Intent intent2 = new Intent(AndroidTest. this , Activity2. class );

intent2.putExtra( "data" , "zhanghua" );

startActivity(intent2);

}

};

button.setOnClickListener(listener);

}

}

package com.quqi;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

///

/* @author huazhang

/* @date 20110316

/*/

public class Activity2 extends Activity

{

/// Called when the activity is first created. /*/

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

String date = "";

Bundle extras = getIntent().getExtras();

if (extras != null)

{

date = extras.getString("data");

}

TextView text = (TextView) findViewById(R.id.text);

text.setText("here is activity2, " + date);

Button button = (Button) findViewById(R.id.button);

button.setText("return");

OnClickListener listener = new OnClickListener() {

public void onClick(View v)

{

Intent intent1 = new Intent(Activity2.this, AndroidTest.class);

startActivity(intent1);

}

};

button.setOnClickListener(listener);

}

}

再剩下的事情就应该只是熟悉API了,待续...

分享到:

网站架构相关PPT、文章整理(更新于2009

Posted on

网站架构相关PPT、文章整理(更新于2009-7-15)

BlueDavy之技术Blog

理论不懂就实践,实践不会就学理论!

网站架构相关PPT、文章整理(更新于2009-7-15)

在这篇blog中放置了我收集的一些网站架构相关的PPT和文章,提供给大家下载,如果大家有相关的好的PPT、文章的话,也欢迎推荐给我,非常感谢,:),这篇blog的内容也会随着我收集的东西增加而变化,同时也会增加我对于这些PPT、文章的看法和评价。 1、amazon Amazon的分布式key-value存储系统(dynamo)的论文 2、ebay(我对于eBay这几个PPT的一些看法和评价:http://www.blogjava.net/BlueDavy/archive/2009/07/24/288055.htmlebay架构演变历程(The eBay Architecture) ebay架构原则(eBay architecture principles) ebay的自动化(Teaching machines to fish) 3、facebook facebook的缓存系统 facebook的架构 facebook百亿相片的高效存储 4、fotolog 扩展世界上最大的图片blog社区 5、google GFS介绍 GFS论文 Mapreduce介绍 Mapreduce论文 Google在web前端方面的经验(even faster websites) 建设大型可扩展的IRS系统的挑战(challenges in building large-scale IRS) 松耦合分布式系统中的锁服务(lock service for loosly-coupled distributed system) “滚木移石”不停机升级策略论文(modular software upgrades for distributed program) Google wave的架构 6、linkedin linkedin远程通讯架构 7、livejournal livejournal架构演变历程 8、myspace myspace架构 9、wikipedia wikipedia架构 10、yahoo yahoo定制的apache--yapache 11、youtube scaling youtube 12、Twitter Designing a Scalable Twitter 13、豆瓣 技术演变历程(QCon 2009北京) 14、freewheel 架构(QCon 2009北京) 15、优酷 架构(QCon 2009北京) 16、淘宝 技术演变历程(QCon 2009北京) 17、twitter Improving the Performance and Scalability of Twitter

posted on 2009-04-28 20:29 BlueDavy 阅读(38737) 评论(66) 编辑 收藏 所属分类: Internet

[

评论

]()

非常想听到你的看法:) 回复 更多评论

跪谢分享,全部下来贪婪地阅读 回复 更多评论

Good,非常感谢分享! 回复 更多评论

太感谢了,正在学习呢,!大家可以相互交流weiwu86@gmail.com 回复 更多评论

...... 等哪天负载上去了再学习. 回复 更多评论

Good!! 现在正在看关于Google的MapReduce和Bigtable呢,谢谢! 回复 更多评论

谢谢BlueDavy,这些资料非常有用,而且大都是PDF,查阅很方便。 回复 更多评论

非常感谢,有点儿激动。 回复 更多评论

哇塞,太谢谢了. 回复 更多评论

http://www.riawork.org/ 怎么打不开 回复 更多评论

下不了啊,怎么回事啊 回复 更多评论

@cowrie ...服务器坏了,好了后我再通知大家。 回复 更多评论

下不了哦。 早点看到这个blog文章就好了,面试的事后很多问题也就有更多想法了。 回复 更多评论

服务器恢复了,需要的同学们可以继续下载了。 回复 更多评论

有没有具体一点的介绍! 回复 更多评论

望洋兴叹啊。。。 回复 更多评论

very useful, thanks very very much. 回复 更多评论

非常实用的东西 回复 更多评论

15、优酷 架构(QCon 2009北京) 16、淘宝 技术演变历程(QCon 2009北京) 无法下载。。。。。 请老大更新一下咯~~~ 回复 更多评论

@zppan 恩?我这看到可以下载的 回复 更多评论

收集了这么多,实属罕见,非常感谢~ 回复 更多评论

恩! 谢谢朋友了,共享这么多,有个问题请教,在看了淘宝构架后发现设计很巧妙,按照淘宝构架的来看200台服务器70亿个点击每天,那么高峰时候如果全是前段服务器也要至少x000+/s的请求,的确成为高海量java程序的代表,不知道osgi在这里扮演个什么样的角色,还有不知分布式系统结构中采用什么样的底层技术RMI?web-service?osgi分布?CORBA?或者其他,才能承受如此多的请求.还希望朋友多多赐教 回复 更多评论

全部下载了,非常感谢你的分享! 回复 更多评论

谢谢兄台了,全部下载, 回复 更多评论

全部下载了,谢谢分享!! 回复 更多评论

谢谢 回复 更多评论

谢谢!!! 回复 更多评论

这里还有一些架构介绍: Ravelry 的 Rails 架构 http://www.vpsee.com/2009/09/ravelry-rails-arch/ Craigslist 的 LAMP 架构 http://www.vpsee.com/2009/09/craigslist-lamp-arch/ GitHub 的 Rails/Git 架构 http://www.vpsee.com/2009/10/github-rails-arch/ Netlog 的数据库及 LAMP 架构 http://www.vpsee.com/2009/07/netlog-db-lamp-arch/ 回复 更多评论

做好事了!有机会可以把这些内容组织起来进行一下讨论,在交流中带来更多认识。 回复 更多评论

非常感谢。。。分享。。。让世界自由联通 回复 更多评论

对不起,下载链接全部不能用了,能发送一份给我么? severe (at) sina.com 回复 更多评论

@Rs 不好意思,那个网站被...了,等挪好地方后再来这里通知。 回复 更多评论

请教一个关于OSGi问题,使用SpringDM+ibatis时,加载oralce驱动(ojdbc5.jar)老不行,这个怎么解决;) 回复 更多评论

老哥,网站什么时候搬好啊,早先没有下载,后来发现不能下载了,后悔中。。。啊~ 回复 更多评论

@lovvver 这些东西争取这周末前搬好,:) 回复 更多评论

@lovvver 文档已挪至新的网站,可以重新下载了。 回复 更多评论

@BlueDavy 谢谢谢谢,一直关注你的网站架构方面的内容,继续向你学习。 回复 更多评论

相当感谢 有好东西一定告诉你 回复 更多评论

感谢提供这么好的东西 回复 更多评论

非常感谢,都是很好的资料 回复 更多评论

很有用的资料,赞。 我也搜集了很多图像搜索的资讯呢。 回复 更多评论

NB啊! 回复 更多评论

谢谢 分享,学习了。 回复 更多评论

高超技术啊。。 回复 更多评论

资料不能下载了,能帮忙check一下吗? 回复 更多评论

bluedavy.com怎么访问不了 回复 更多评论

好像下不下来呢!可以发到我的邮箱吗,非常谢谢哦!634001201@qq.com 回复 更多评论

谢谢分享,回去看 回复 更多评论

不错 回复 更多评论

很多都无法下载了???? 回复 更多评论

不错的文章,投下贪婪的目光 回复 更多评论

收集的很全面,多谢分享! 回复 更多评论

下载链接挂了哦,希望主人能够补上 回复 更多评论

打不开啊。。。这么好的文章打不开啊。。怎么办? 回复 更多评论

文章不错哦!给力支持哈! 回复 更多评论

大牛!! 回复 更多评论

文章不错 回复 更多评论

评论蛮多的嘛,可惜文章太久不更新了 回复 更多评论

我看下对我是否有帮助,我也用用 回复 更多评论

谢谢博主的分享,学习了,会经常关注博主的文章的 回复 更多评论

顶起 支持博主 回复 更多评论

gfddgdsdfgsfdsgfd 回复 更多评论

全是极好的东东,可是下载不了,能不能发到我邮箱?yyguang1@163.com 回复 更多评论

很好的文章,支持下,继续努力,关注中。。。 回复 更多评论

写的还是不错的http://www.ishowtu.com/ 回复 更多评论

这个文章很有用,收藏 回复 更多评论 新用户注册 刷新评论列表

推荐购买云服务器(15%返利+最高千元奖金) 博客园 博问 IT新闻 Java程序员招聘 标题 请输入标题 姓名 请输入你的姓名 主页 请输入验证码 验证码 /* 内容(请不要发表任何与政治相关的内容) 请输入评论内容 Remember Me? 登录 [使用Ctrl+Enter键可以直接提交] 网站导航:

博客园 IT新闻 知识库 C++博客 程序员招聘 管理 相关文章:

feedsky 抓虾 google reader 鲜果

导航

统计

  • 随笔 - 294
  • 文章 - 2
  • 评论 - 2068
  • 引用 - 1

随笔分类

随笔档案

文章档案

Blogger's

搜索

*

最新评论

阅读排行榜

评论排行榜

CSS经典实用技巧10招

Posted on

CSS经典实用技巧10招 - 南昌分站专版 - CSDN_net程序员地方俱乐部 - Powered by Discuz!

CSDN首页| 空间| 新闻| 论坛| 群组| BLOG| 文档| 下载| 读书| 网摘| 视频| 开源| 书店| 程序员| 项目交易| 培训

CSDN.net程序员地方俱乐部

注册 登录

‹‹ 上一主题 | 下一主题 ››发新话题

[论坛新帖] CSS经典实用技巧10招

huangruifang

新手上路

Rank: 1

CSS经典实用技巧10招

一.使用css缩写 使用缩写可以帮助减少你CSS文件的大小,更加容易阅读。css缩写的主要规则请参看《常用css缩写语法总结》,这里就不展开描述。 二.明确定义单位,除非值为0 忘记定义尺寸的单位是CSS新手普遍的错误。在HTML中你可以只写width="100",但是在CSS中,你必须给一个准确的单位,比如:width: 100px width:100em。只有两个例外情况可以不定义单位:行高和0值。除此以外,其他值都必须紧跟单位,注意,不要在数值和单位之间加空格。 三.区分大小写 当在XHTML中使用CSS,CSS里定义的元素名称是区分大小写的。为了避免这种错误,我建议所有的定义名称都采用小写。 class和id的值在HTML和XHTML中也是区分大小写的,如果你一定要大小写混合写,请仔细确认你在CSS的定义和XHTML里的标签是一致的。 四.取消class和id前的元素限定 当你写给一个元素定义class或者id,你可以省略前面的元素限定,因为ID在一个页面里是唯一的,而clas s可以在页面中多次使用。你限定某个元素毫无意义。例如: div/#content { } fieldset.details { } 可以写成 /#content { } .details { } 这样可以节省一些字节。 五.默认值 通常padding的默认值为0,background-color的默认值是transparent。但是在不同的浏览器默认值可能不同。如果怕有冲突,可以在样式表一开始就先定义所有元素的margin和padding值都为0,象这样: /* { margin:0; padding:0; } 六.不需要重复定义可继承的值 CSS中,子元素自动继承父元素的属性值,象颜色、字体等,已经在父元素中定义过的,在子元素中可以直接继承,不需要重复定义。但是要注意,浏览器可能用一些默认值覆盖你的定义。 七.最近优先原则 如果对同一个元素的定义有多种,以最接近(最小一级)的定义为最优先,例如有这么一段代码 Update: Lorem ipsum dolor set 在CSS文件中,你已经定义了元素p,又定义了一个class"update" p { margin:1em 0; font-size:1em; color:/#333; } .update { font-weight:bold; color:/#600; } 这两个定义中,class="update"将被使用,因为class比p更近。你可以查阅W3C的《 Calculating a selector’s specificity》 了解更多。 八.多重class定义 一个标签可以同时定义多个class。例如:我们先定义两个样式,第一个样式背景为/#666;第二个样式有10 px的边框。 .one{width:200px;background:/#666;} .two{border:10px solid /#F00;} 在页面代码中,我们可以这样调用 这样最终的显示效果是这个div既有/#666的背景,也有10px的边框。是的,这样做是可以的,你可以尝试一下。 九.使用子选择器(descendant selectors) CSS初学者不知道使用子选择器是影响他们效率的原因之一。子选择器可以帮助你节约大量的class定义。我们来看下面这段代码: Item 1> Item 1 Item 1 这段代码的CSS定义是: div/#subnav ul { } div/#subnav ul li.subnavitem { } div/#subnav ul li.subnavitem a.subnavitem { } div/#subnav ul li.subnavitemselected { } div/#subnav ul li.subnavitemselected a.subnavitemselected { } 你可以用下面的方法替代上面的代码 Item 1 Item 1 Item 1 样式定义是: /#subnav { } /#subnav li { } /#subnav a { } /#subnav .sel { } /#subnav .sel a { } 用子选择器可以使你的代码和CSS更加简洁、更加容易阅读。 十.不需要给背景图片路径加引号 为了节省字节,我建议不要给背景图片路径加引号,因为引号不是必须的。例如: background:url("images margin:0 auto; } 但是IE5/Win不能正确显示这个定义,我们采用一个非常有用的技巧来解决:用text-align属性。就象这样: body { text-align:center; } UID 3976 帖子 183 精华 0 积分 0 阅读权限 255 在线时间 26 小时 注册时间 2009-11-25 最后登录 2009-12-15

查看详细资料 TOP

http://club.csdn.net/space.php?uid=4129

新手上路

Rank: 1

很好

总结的很好! UID 4129 帖子 1 精华 0 积分 0 阅读权限 255 在线时间 0 小时 注册时间 2009-12-14 最后登录 2009-12-14

查看详细资料 TOP skyscraping

新手上路

Rank: 1

总结得非常好,也很有用,学习了。。。 UID 4140 帖子 1 精华 0 积分 0 阅读权限 255 在线时间 0 小时 注册时间 2009-12-14 最后登录 2009-12-14

查看详细资料 TOP

xiaolong0211

新手上路

Rank: 1

学习了,谢谢~~ UID 3175 帖子 2 精华 0 积分 0 阅读权限 255 在线时间 0 小时 注册时间 2009-8-21 最后登录 2009-12-14

查看详细资料 TOP ‹‹ 上一主题 | 下一主题 ››发新话题

清除 Cookies - 联系我们 - CSDN.NET - Archiver - WAP - TOP Discuz!

Powered by Discuz! 6.1.0 © 2001-2008 Comsenz Inc.

Processed in 0.028199 second(s), 7 queries.

浅谈Java开发中的设计模式

Posted on

浅谈Java开发中的设计模式

浅谈Java开发中的设计模式

1、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

2、建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。

3、工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

4、原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。

5、单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。

6、适配器(变压器)模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。

7、桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。

8、合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。

9、装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。

10、门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。

11、享元模式:FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部,不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态,它们是相互独立的。将可以共享的状态和不可以共享的状态从常规类中区分开来,将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象,而应当使用一个工厂对象负责创建被共享的对象。享元模式大幅度的降低内存中对象的数量。

12、代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。

13、责任链模式:在责任链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。

14、命令模式:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。

15、解释器模式:给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。

16、迭代子模式:迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中,从而与聚集本身隔开。迭代子模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭代子对象,每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。

17、调停者模式:调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。

18、备忘录模式:备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。

19、观察者模式:观察者模式定义了一种一队多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。

20、状态模式:状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。

21、策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。

22、模板方法模式:模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。

23、访问者模式:访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易,就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。当使用访问者模式时,要将尽可能多的对象浏览逻辑放在访问者类中,而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员

JQuery 学习总结及实例

Posted on

JQuery 学习总结及实例

JQuery 学习总结及实例

1、JQuery简介 普通JavaScript的缺点:每种控件的操作方式不统一,不同浏览器下有区别,要编写跨浏览器的程序非常麻烦。因此出现了很多对JavaScript的封装库,比如Prototype、Dojo、ExtJS、JQuery等,这些库对JavaScript进行了封装,简化了开发。这些库是对JavaScript的封装,也就是咱们调用JQuery的一句函数,JQuery内部这句函数帮我们调用JavaScript中的代码几十句,因为JQuery就是JavaScript语法写的一些函数类,内部仍然是调用JavaScript实现的,所以并不是代替JavaScript的。使用JQuery的代码、编写JQuery的扩展插件等仍然需要JavaScript的技术,Jquery本身就是一堆JavaScript函数。

       (1、Jquery是最火的JavaScript库,已集成到VS2010,MS的Ajax toolkit和JQuery结合也是最方便,JQuery的扩展插件也是非常多。

       (2、JQuery的优点:尺寸小、使用简单方便(Write Less, Do More,吃得少干得多。

                 链式编程($("/#div1").draggble().show().hide().fly())、
                 隐式迭代  (自动对于多个元素进行迭代方法调用))、

                屏蔽浏览器差异跨浏览器兼容性好(IE 6.0+, FF 2+, Safari 3.0+, Opera 9.0+, Chrome)、插件丰富、 开源、免费。
       (3、VS中JavaScript、JQuery的自动完成功能:在VS2010中直接有,VS008需要安装VisualStudio 和VS90SP1-KB958502-x86补丁会更强更好用, 下

               载地址见备注。然后引用jquery-1.4.1.js,jquery-1.4.1-vsdoc.js放到同目录下,不需要在页面引用。
       (4、vsdoc是vs2008sp1以后增加的一个技术,将js文件对应的vsdoc(相当于js库提供的方法的说明库)放到和js一起,就有会第三方js的自动提示的功能

2、简单的JQuery之Ready

 (1、注册事件的函数,和普通的dom不一样,不需要在元素上标记on/*/*这样的事件。

$(document).ready(function(){

       alert("加载完毕!");
   });

(2、当页面Dom元素加载完毕时执行代码,可以简写为: $(function(){

       alert("加载完毕!");
  });

  (3、和onload类似,但是onload只能注册一次(没有C/#中的+=机制),后注册的取代先注册的,而ready则可以多次注册都会被执行。
                window.onload=function(){alert("1")};window.onload=function(){alert("2")};//结果只弹出2

  (4、JQuery的ready和Dom的onload的区别(/*):onload是所有Dom元素创建完毕、图片、Css等都加载完毕后才被触发,而ready则是Dom元素创建完毕后就被触发,这样可以提高网页的响应速度。在jQuery中也可以用$(window).load()来实现onload那种事件调用的时机。
       $(function(){alert("1111");});//简写方式

3、JQuery的函数

$.map(array,fu) 得到函数的返回值和$.each(array,fn)调用函数处理没有返回值

map函数和each函数

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 18 19 20 21 22

4、JQuery对象和Dom对象 (1、$('/#div1')得到的就是jQuery对象,jQuery对象只能调用jQuery对象封装的方法,不能调用Dom对象的方法,Dom对象也不能调用jQuery对象的方法,所

             以 alert($('/#div1').innerHTML是错的,因为innerHTML是DOM对象的属性。
     (2、Array是JS语言本身的对象,不是Dom对象,因此不需要转换为Jquery对象才能用

     (3、将Dom对象转换为JQuery对象的方法,$(dom对象);当调用jQuery没有封装的方法的时候必须用Dom对象,转换方法:vardomobj = jqobj[0]或者
              vardomobj=jqobj.get(0)

     (4、在引用外部js的Script标签内不能再写js代码,引用外部js的Script标签也不能用简写方法闭合。

JQuery对象和Dom对象

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 23 24 25

26 测试red27 28
29 30

5、JQuery 选择器

(1、$(“/#div1”).html();

(2、$("TagName")来获取所有指定标签名的jQuery对象,相当于getElementsByTagName:

           例如获得所有的P:$("p").html("我们都是P");

 (3、标签选择器,拥有样式的标签选择器
         ☆ 多条件选择器:$("p,div,span.menuitem"),同时选择p标签、div标签和拥有menuitem样式的span标签元素(类似于CSS选择器)

         ☆ 注意选择器表达式中的空格不能多不能少。易错!
         ☆ 层次选择器:

☆☆$("div li")获取div下的所有li元素(后代,子、子的子……) ☆☆$("div > li")获取div下的直接li子元素

☆☆$(".menuitem +div")获取样式名为menuitem之后的第一个div元素(不常用) ☆☆$(".menuitem ~div")获取样式名为menuitem之后所有的div元素(不常用)

案例1:

JQuery选择器1

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 7 16 19 20 21

22

23 test1

24

25 test2

26

27 test3

28
29 30

6、JQuery的迭代 如何判断对象是否存在,jQuery选择器返回的是一个对象数组(数组中的每个对象还是Dom对象),调用text()、html()、click()之类方法的时候其实是对数组中每个元素迭代调用每个方法,因此即使通过id选择的元素不存在也不会报错,如果需要判断指定的id是否存在,应该写:

if($("/#btn1").length <= 0) {

            alert("id为btn1的元素不存在!");

} 7、节点遍历

    (1、  next() 方法用于获取节点之后的挨着的第一个同辈元素, 
    (2、$(".menuitem").next("div") 、 nextAll() 方法用于获取节点之后的所  有同辈元素, $(".menuitem").nextAll("div")  prev 、 prevAll 之前的元素   
    (3、siblings() 方法用于获取所有同辈元素,$(".menuitem").siblings("li")   siblings 、next 等所有能传递选择器的地方能够使用的语法都和 $() 语法一样。

节点遍历

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 24 25 26

27 aa
28
29 bb
30
31 cc
32

33 p1

34

35 p2

36
37 dd
38
39 ee
40 41

8、链式编程

  链式编程就是对象一棒棒向下传,能不能正确传下来要看返回值,html()不能传,prevAll().nextAll()也传错。

           $("/#tableRating td").click(function() {$(this).prevAll().next().html("a"); });//经典!

案例1:样式的增删:addClass和removeClass 添加样式和移除样式

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 9 10 14 15 16


17
18
19 20

案例2:五角星评分

五角星评分

1 // 2 $(function() { 3 $("/#ratings td").html("") 4 .mouseover(function() { $("/#ratings td").html(""); $(this).nextAll().html(""); }); 5 6 }); 7 // 8 9 $(function() { 10 $("/#ratings td").html("") 11 .mouseover(function() { $("/#ratings td").html("") 12 .siblings().html(""); 13 $(this).nextAll().html(""); 14 }); 15 16 }); 17 18 19

20 21

9、基本过滤选择器 (1、:first 选取第一个元素。 $("div:first") 选取第一个

(2、:last 选取最后一个元素。 $("div:last") 选取最后一个
(3、:not( 选择器 ) 选取不满足 " 选择器 " 条件的元素, $("input:not(.myClass)") 选取样式名不是 myClass 的 (4、:even 、 :odd ,选取索引是奇数、偶数的元素: $("input:even") 选 取索引是奇数的 (5、:eq( 索引序号 ) 、 :gt( 索引序号 ) 、 :lt( 索引序号 ) 选取索引等于、大于、小于索引序号的元素,比如 $("input:lt(5)") 选取索引小于 5 的

       (6、$(":header") 选取所有的 h1 …… h6 元素( /* ) 
              $("div:animated") 选取正在执行动画的 <div> 元素。   ( /* )

案例1:

    $("/#table1 tr:last").css("color", "red");
    $("/#table1 tr:gt(0):lt(3)").css("color", "red");//lt(3)是从gt(0)后得到的新序列中的序号,不要写成lt(4);
    $("/#table1 tr:gt(0):even").css("background", "red"); //表头不参与"正文表格的奇数行是红色背景",所以gt(0)去掉表头

10、相对选择器

   不仅可以使用选择器进行进行绝对定位,还可以进行相对定位, (双重选择)

   只要在 $() 指定第二个参数,第二个参数为相对的元素 .  $("ul", $(this)).css("background", "red");  //ul下面的+包含本身=ul下面的本身

View Code

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 7 14 15 16

17 18 19 20 21 22 23 24
姓名成绩
tom100
lucy99
jim95
david85
candy84
平均分90
25 26

11、属性过滤选择器: (1、$("div[id]") 选取有 id 属性的

(2、 $("div[title=test]") 选取 title 属性为 " test " 的
, JQuery 中没有对getElementsByName 进行封装,用 $("input[name=abc]")
(3、$("div[title!=test]") 选取 title 属性不为 " test " 的
还可以选择开头、结束、包含等,条件还可以复合。( /* )

属性过滤

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 19 20 21 北京
22 南京
23 东京
24 西安
25 开封
26
27 28

12、表单对象选择器

    $("/#form1:enabled") 选取 id 为 form1 的表单内所有启用的元素 
 $("/#form1:disabled") 选取 id 为 form1 的表单内所有禁用的元素 
 $("input:checked") 选取所有选中的元素( Radio 、 CheckBox ) 
 $("select:selected") 选取所有选中的选项元素(下拉列表)

表单对象

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 22 23 24 tom25 jim26 lily27

28

29 30

13、JQuery的Dom操作

(1 、使用 html() 方法读取或者设置元素的 innerHTML : alert($("a:first").html()); $("a:first").html("hello"); (2 、使用 text() 方法读取或者设置元素的 innerText : alert($("a:first").text()); $("a:first").text("hello"); (3 、 使用 attr() 方法读取或者设置元素的属性,对于JQuery没有封装的属性(所有浏览器没有差异的属性)用 attr 进行操作。 alert($("a:first").attr("href")); $("a:first").attr("href", "http://www.rupeng.com");
(4 、使用 removeAttr 删除属性。删除的属性在源代码中看不到,这是和清空属性的区别

14、动态创建Dom节点

   (1、使用 $(html 字符串) 来创建 Dom 节点,并且返回一个 jQuery 对象,然后调用 append 等方法将新创建的节点添加到 Dom 中:
      例子:var link = $("<a href='http://www.baidu.com'> 百度 </a>");
           $("div:first").append(link);
(2、$() 创建的就是一个 jQuery 对象,可以完全进行操作
         var link = $("<a href='http://www.baidu.com'> 百度 </a>");
          link.text("百度");
          $("div:first").append(link); 

动态添加Dom对象

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 20 21 22

23 24 26 27
25
28 29

(3、append 方法用来在元素的末尾追加元素。

     //$("/#select1 option:selected").remove().appendTo($("/#select2")) ;
        $("/#select1 option:selected").appendTo($("/#select2")) ;
     prepend ,在元素的开始添加元素。
     after ,在元素之后添加元素(添加兄弟)
     before :在元素之前添加元素(添加兄弟)

15、删除节点 (1、remove() 删除选择的节点 案例:清空 ul 中的项, $("ul li.testitem").remove(); 删除 ul 下 li 中有 testitem 样式的元素。
remove 方法的返回值是被删除的节点对象,还可以继续使用被删除的节点。比如重新添加到其他节点下 var lis = $("/#ulSite li").remove(); $("/#ulSite2").append(lis);
(2、remove掉后再重新移动: var items = $("/#select1 option:selected").remove(); $("/#select2").append(items); 更狠的: $("/#select1 option:selected").appendTo($("/#select2")) 权限管理

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 29 30 31 38

39 40 41 42 43
44 46 47

 (3、empty() 是将节点清空,不像 remove 那样还可以添加到其他元素中。 

16、Dom实例改编

案例1:加法计算器 加法计算器

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 16 17 18 + 19 20 21 22 23

案例2:全选全部选按钮

全选全不选按钮

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 22 23 24

25 1111111111
26 22222222222
27 33333333333
28 4444444444
29 444
30
31 32 33 34 35 36

案例3:倒计时注册页面

倒计时注册页面

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 25 26 27 28 29

案例4:球队选择

球队选择

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 15 16 17

    18
  • 中国
  • 19
  • 美国
  • 20
  • 日本
  • 21
  • 新加坡
  • 22
  • 意大利
  • 23
  • 法国
  • 24
  • 德国
  • 25
26
    27
28 29

17、节点操作

    (1、替换节点: $("br").replaceWith("<hr/>");
         例子:将 <br/> 替换为 <hr/> :$("br").replaceWith("<hr/>");
    (2、包裹节点 :wrap() 方法用来将所有元素逐个用指定标签包裹:
            $("b").wrap("<font color='red'></font>")  将所有粗体字红色显示  

18、样式操作

(1、获取样式   attr("class") ,设置样式 attr("class","myclass myclass2 myclass3") ,追加样式 addClass("myclass")( 不影响其他样式 ) ,
       移除样式 removeClass("myclass") ,切换样式(如果存在样式则去掉样式,如果没有样式则添加样式) toggleClass("myclass") ,
       判断是否存在样式: hasClass("myclass")

  例子:开关灯:$(document.body).toggleClass(”night“); 

19、练习

练习1:黑白切换,设置body中的颜色切换Filter

黑白切换

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 黑白切换 5 8 9 10 17 18 19
20 21 22

练习2:聚集控件高亮:$("body /") ,选择器 / 表示所有类型的控件 聚集控件高亮

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 7 8 聚集控件高亮 9 12 13 14 21 22 23 24

25 daomul 26
27

28 http://www.cnblogs.com/daomul/29

30 31 32

练习3:搜索框

搜索框效果

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 7 8 搜索框效果 9 10 14 15 18 19 20 35 36 37 38 39 40

20、RadioButton的操作

  (1、取得 RadioButton 的选中值 :$("input[name=gender]:checked").val()
      <input id="Radio2" checked="checked" name="gender"  type="radio" value=" 男 " /> 男
      <input  id="Radio1" checked="checked" name="gender"  type="radio" value=" 女 " /> 女 
      <input id="Radio3" checked="checked" name="gender" type="radio"  value=" 未知 " /> 未知 </p> 
 (2、设置 RadioButton 的选中值: $("input[name=gender]").val([" 女 "]);
                                          或者 $(":radio[name=gender]").val([" 女 "]); 
        注意 val 中参数的 [] 不能省略

RadioButton

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 7 RadioButton 8 9 12 13 25 26 27
28
29 保密
30 篮球
31 足球
32 羽毛球
33 冰球
34 35 36 37

  (3、对 RadioButton 的选择技巧对于 CheckBox 和 Select 列表框也适用。除了可以使用 val 批量设置 RadioButton 、 CheckBox 等的选中以
         外,还可以设定 checked 属性来单独设置控件的选中状态  
                            $("/#btn1").attr("checked",true)

21、JQuery事件

   (1、事件绑定: $("/#btn").bind("click",function(){}) ,每次都这么调用太麻烦,所以 jQuery 可以用 $("/#btn").click(function(){}) 来进行简化 
   (2、合成事件 hover , hover(enterfn,leavefn) ,当鼠标放在元素上时调用enterfn 方法,当鼠标离开元素的时候调用 leavefn 方法

合成事件hover

1 2 合成事件_hover 3 4 5 18 19 20

你好!

21

  (3、事件冒泡: JQuery 中也像 JavaScript 一样是事件冒泡。如果想获得事件相关的信息,只要给响应的匿名函数增加一个参数: e ,   
                         e 就是调用事件对象的 stopPropagation() 方法终止冒泡。 e. stopPropagation();
              $("tr").click(function(e) { alert("tr 被点击 "); e.stopPropagation(); });// 注意函数的参数是 e 
  (4、阻止默认行为:有的元素有默认行为,比如超链接点击后会转向新链接、提交按钮默认会提交表单,
                             如果想阻止默认行为只要调用事件对象的preventDefault() 方法和 window.event.returnValue=false 效果一样。
              $("a").click(function(e) { alert(" 所有超链接暂时全部禁止点击 "); 
                                                 e.preventDefault(); });

事件绑定

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 7 RadioButton 8 9 12 13 23 24 25

26 27 30 31
28

nihao

29
32 33

22、事件其他( /* ) (1、属性: pageX 、 pageY 、 target获得触发事件的元素 ( 冒泡的起始,和this不一样) which如果是鼠标事件获得按键(1左键,2中键,3右键)。 altKey 、 shiftKey 、 ctrlKey 获得 alt 、shift、ctrl 是否按下,为bool值。 keyCode 、 charCode 属性发生事件时的keyCode (键盘码,小 盘的1和主键盘的 keyCode 不一样)、charCode ( ASC 码)。
(2、移除事件绑定: bind() 方法即可移除元素上所有绑定的事件,如果 unbind("click") 则只移除 click 事件的绑定。 bind:+= ; unbind:-=
(3、一次性事件:如果绑定的事件只想执行一次随后立即 unbind 可以使用 one() 方法进行事件绑定: $(":button").one("click", function() { alert("点了"); }); 23、鼠标

(1、获得发生事件时鼠标的位置
            $(document).mousemove(function(e) {
                   document.title = e.pageX + "," + e.pageY;
             });
(2、在 mousemove 、 click 等事件的匿名响应函数中如果指定一个参数 e ,那么就可以从 e 读取发生事件时的一些信息,比如对mousemove 等鼠标事件   来
       说,就可以读取 e.pageX 、 e.pageY 来获得发生事件时鼠标在页面的坐标。 

案例1:跟着鼠标飞

跟着鼠标飞

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 6 9 10 18 19 20

21 22
23 24

案例2:点击小图显示详情

点击小图显示详情

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 8 9 35 36 37

45 46

24、动画及QQ风格控件 (1、show() 、 hide() 方法会显示、隐藏元素。用 toggle() 方法在显示、隐藏之间切换 $(":button[value=show]").click(function() { $("div").show(); }); $(":button[value=hide]").click(function() { $("div").hide(); }); (2、 如果 show 、 hide 方法不带参数则是立即显示、立即隐藏,如果指定速度参数则会用指定时间进行动态显示、隐藏,单位为毫秒 ,也可以使用三个内置的速

        度: fast (200 毫秒)、 normal (400 毫秒)、 slow (600 毫秒), jQuery 动画函数中需要速度的地方一般也可以使用这个三个值。

模拟QQTab效果

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 10 11 22 23 24

QQTab效果

25
    26
  • 我的好友
  • 27
  • mm
    baba
    mama
  • 28
  • 我的女友
  • 29
  • gemen
  • 30
  • 陌生人
  • 31
  • meinv
    shuaige
  • 32
33 34 35

25、JQuery Cookie 使用 (1、使用方法, Cookie 保存的是键值对 /1 、添加对 jquery.cookie.js /2 、设置值, $.cookie(' 名字 ', ' 值 ') 。 cookie 中保存的值都是文本。 /*3 、读取值, var v=$.cookie(' 名字 ') alert($.cookie(" 用户名 ")); $.cookie(" 用户名 ","tom"); 在同域名的另外一个页面中也能读取到。 (2、设置值的时候还可以指定第三个参数, $.cookie(' 名字 ', ' 值 ', { expires: 7, path: '/',domain: 'itcast.cn', secure: true }) ,
expires 表示要求浏览器保留 Cookie 几天,这个值只是给浏览器的建议,可能没到时间就已经被清除了。可以实现 " 勾选 【 记录我的用户 名 10 天 】 " 的功能。如果不设定 expires 在浏览器关闭以后就清除, options 参数用哪个设置哪个
案例:记住背景色

记住背景色

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 4 5 7 8 9 30 31 32

33 34 37 40 43 44
35 红色36 38 绿色39 41 黄色42
45 46 47 48

26、JQueryUI

下载地址:http://jqueryui.com/下发包 View Code

1 2 JQueryUI的使用 3 4 5 6 7 13 14 15

你好,我是对话框
16
17 21
用户名:
22
刷新频率:
23
24

分类: jQuery

绿色通道: 好文要顶 关注我 收藏该文与我联系 daomul 关注 - 1 粉丝 - 43

+加关注

32

0 (请您对文章做出评价)

«上一篇:Dom 学习总结及其实例 »下一篇:.NET运用AJAX 总结及其实例