張慧的博客

          張慧的博客

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks

          #

          CSS(Cascading Style Sheet) 層疊樣式表,一種和Html聯(lián)系非常大的標(biāo)記語言,主要用戶控制網(wǎng)頁的樣式,并能把樣式和網(wǎng)頁內(nèi)容分離,因此能大大提高網(wǎng)頁開發(fā)的效率。

                 初識(shí)CSS,感覺這個(gè)名字有點(diǎn)難以理解,“樣式表”理解起來比較容易,就是定義網(wǎng)頁的樣式,也可以叫風(fēng)格,那層疊怎么理解呢?

                 這要從CSS的繼承說起,學(xué)過面向?qū)ο蟮脑挘瑢^承一定不陌生,CSS的繼承更簡單一些:

             

          在Html中各個(gè)標(biāo)簽可以看作是一個(gè)個(gè)容器,例如:

          1. <span style="font-size:18px;"><p>詳解CSS的<em>名稱</em>含義</p></span>  

                 這一句話中,<p>標(biāo)簽是一個(gè)大容器,里面有<em>標(biāo)簽 ,我們把<p>標(biāo)簽定義成父標(biāo)簽,那么<em>標(biāo)簽就成了子標(biāo)簽。當(dāng)我對<p>標(biāo)簽(父標(biāo)簽)用CSS樣式時(shí),字標(biāo)簽會(huì)完全繼承父標(biāo)簽的風(fēng)格,當(dāng)然這種關(guān)系可能會(huì)有更多層(上面的例子為兩層):

          這張圖上,每個(gè)子標(biāo)簽都會(huì)繼承父標(biāo)簽的樣式,這種層層嵌套的關(guān)系,也就是CSS名稱的含義。

          posted @ 2012-08-16 22:29 張慧 閱讀(1665) | 評(píng)論 (0)編輯 收藏

          經(jīng)常用到多個(gè)透明圖片層疊,但又需要獲取不同圖片的點(diǎn)擊事件,本文實(shí)現(xiàn)圖片透明區(qū)域穿透點(diǎn)擊事件。

          效果圖:

           歡迎轉(zhuǎn)載請說明轉(zhuǎn)自:http://blog.csdn.net/aminfo/article/details/7872748

          一、先上圖片,這2張圖片尺寸是一樣的,放到drawable目錄下:

          圖1:transparent.png

           

          圖2:transparent2.png

           

          二、上布局文件,test.xml

          <?xml version="1.0" encoding="utf-8"?>
          <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width
          ="fill_parent"
             android:layout_height
          ="fill_parent"
             android:orientation
          ="vertical"
             android:gravity
          ="center"
             android:id
          ="@+id/mainLayout">
             
              <ImageView android:id="@+id/ImageView01"
                  android:layout_width
          ="wrap_content"
                  android:layout_height
          ="wrap_content"
                  android:src
          ="@drawable/transparent"/>
              
              <ImageView android:id="@+id/ImageView02"
                  android:layout_width
          ="wrap_content"
                  android:layout_height
          ="wrap_content"
                  android:src
          ="@drawable/transparent2"/>    
                    
          </FrameLayout>

          package org.shuxiang.test;

          import android.app.Activity;
          import android.graphics.Bitmap;
          import android.graphics.drawable.BitmapDrawable;
          import android.os.Bundle;
          import android.util.Log;
          import android.view.MotionEvent;
          import android.view.View;
          import android.view.Window;
          import android.view.View.OnClickListener;
          import android.view.View.OnTouchListener;
          import android.widget.ImageView;

          public class MainActivity extends Activity
          {
              private ImageView iv1;
              private ImageView iv2;
              private Bitmap bitmap1, bitmap2;
              private boolean iv1Transparent = false;
              private boolean iv2Transparent = false;

              @Override
              public void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  requestWindowFeature(Window.FEATURE_NO_TITLE);
                  setContentView(R.layout.test);

                  iv1 = (ImageView) findViewById(R.id.ImageView01);
                  iv2 = (ImageView) findViewById(R.id.ImageView02);
                  bitmap1 = ((BitmapDrawable) (iv1.getDrawable())).getBitmap();
                  bitmap2 = ((BitmapDrawable) (iv2.getDrawable())).getBitmap();
                  
                  iv1.setOnClickListener(new OnClickListener(){
                      @Override
                      public void onClick(View v) {
                          // TODO Auto-generated method stub
                          if(iv1Transparent)
                          {
                              Log.i("test", "圖1透明區(qū)域");
                          }
                          else
                          {
                              Log.i("test", "圖1點(diǎn)擊");                    
                          }
                      }
                      
                  });
                  
                  iv1.setOnTouchListener(new OnTouchListener()
                  {
                      @Override
                      public boolean onTouch(View arg0, MotionEvent arg1) 
                      {
                          // TODO Auto-generated method stub
                          if(bitmap1.getPixel((int)(arg1.getX()),((int)arg1.getY()))==0)
                          {
                              Log.i("test", "圖1透明區(qū)域");
                              iv1Transparent = true;    //透明區(qū)域設(shè)置true                    
                          }
                          else
                          {
                              Log.i("test", "圖1實(shí)體區(qū)域");
                              iv1Transparent = false;
                          }
                          return false;
                      }            
                  });
                  
                  iv2.setOnClickListener(new OnClickListener()
                  {
                      @Override
                      public void onClick(View v) {
                          // TODO Auto-generated method stub
                          if(iv2Transparent)
                          {
                              Log.i("test", "圖2透明區(qū)域");
                          }
                          else
                          {
                              Log.i("test", "圖2點(diǎn)擊");                    
                          }
                      }
                      
                  });
                  
                  iv2.setOnTouchListener(new OnTouchListener()
                  {
                      @Override
                      public boolean onTouch(View v, MotionEvent event) {
                          // TODO Auto-generated method stub
                          if(bitmap2.getPixel((int)(event.getX()),((int)event.getY()))==0)
                          {
                              Log.i("test", "圖2透明區(qū)域");
                              iv2Transparent = true;    //透明區(qū)域設(shè)置true
                              iv1.dispatchTouchEvent(event);
                          }
                          else
                          {
                              Log.i("test", "圖2實(shí)體區(qū)域");
                              iv2Transparent = false;
                          }
                          return false;
                      }
                  });
              }
          }


          posted @ 2012-08-16 22:28 張慧 閱讀(3382) | 評(píng)論 (0)編輯 收藏


          需求大致分為三種:
          1.震動(dòng)
          2.系統(tǒng)音效(無需提供音頻文件)
          3.自定義音效(需提供音頻文件)
          我的工具類的封裝:

          1. //  
          2. //  WQPlaySound.h  
          3. //  WQSound  
          4. //  
          5. //  Created by 念茜 on 12-7-20.  
          6. //  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.  
          7. //  
          8.   
          9. #import <UIKit/UIKit.h>  
          10. #import <AudioToolbox/AudioToolbox.h>  
          11.   
          12. @interface WQPlaySound : NSObject  
          13. {  
          14.     SystemSoundID soundID;  
          15. }  
          16.   
          17. /** 
          18.  *  @brief  為播放震動(dòng)效果初始化 
          19.  * 
          20.  *  @return self 
          21.  */  
          22. -(id)initForPlayingVibrate;  
          23.   
          24. /** 
          25.  *  @brief  為播放系統(tǒng)音效初始化(無需提供音頻文件) 
          26.  * 
          27.  *  @param resourceName 系統(tǒng)音效名稱 
          28.  *  @param type 系統(tǒng)音效類型 
          29.  * 
          30.  *  @return self 
          31.  */  
          32. -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type;  
          33.   
          34. /** 
          35.  *  @brief  為播放特定的音頻文件初始化(需提供音頻文件) 
          36.  * 
          37.  *  @param filename 音頻文件名(加在工程中) 
          38.  * 
          39.  *  @return self 
          40.  */  
          41. -(id)initForPlayingSoundEffectWith:(NSString *)filename;  
          42.   
          43. /** 
          44.  *  @brief  播放音效 
          45.  */  
          46. -(void)play;  
          47.   
          48. @end  


          1. //  
          2. //  WQPlaySound.m  
          3. //  WQSound  
          4. //  
          5. //  Created by 念茜 on 12-7-20.  
          6. //  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.  
          7. //  
          8.   
          9. #import "WQPlaySound.h"  
          10.   
          11. @implementation WQPlaySound  
          12.   
          13. -(id)initForPlayingVibrate  
          14. {  
          15.     self = [super init];  
          16.     if (self) {  
          17.         soundID = kSystemSoundID_Vibrate;  
          18.     }  
          19.     return self;      
          20. }  
          21.   
          22. -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type  
          23. {  
          24.     self = [super init];  
          25.     if (self) {  
          26.         NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:resourceName ofType:type];  
          27.         if (path) {  
          28.             SystemSoundID theSoundID;  
          29.             OSStatus error =  AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &theSoundID);  
          30.             if (error == kAudioServicesNoError) {  
          31.                 soundID = theSoundID;  
          32.             }else {  
          33.                 NSLog(@"Failed to create sound ");  
          34.             }  
          35.         }  
          36.           
          37.     }  
          38.     return self;  
          39. }  
          40.   
          41. -(id)initForPlayingSoundEffectWith:(NSString *)filename  
          42. {  
          43.     self = [super init];  
          44.     if (self) {  
          45.         NSURL *fileURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];  
          46.         if (fileURL != nil)  
          47.         {  
          48.             SystemSoundID theSoundID;  
          49.             OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &theSoundID);  
          50.             if (error == kAudioServicesNoError){  
          51.                 soundID = theSoundID;  
          52.             }else {  
          53.                 NSLog(@"Failed to create sound ");  
          54.             }  
          55.         }  
          56.     }  
          57.     return self;  
          58. }  
          59.   
          60. -(void)play  
          61. {  
          62.     AudioServicesPlaySystemSound(soundID);  
          63. }  
          64.   
          65. -(void)dealloc  
          66. {   
          67.     AudioServicesDisposeSystemSoundID(soundID);  
          68. }  
          69. @end  


          調(diào)用方法步驟:
          1.加入AudioToolbox.framework到工程中
          2.調(diào)用WQPlaySound工具類

          2.1震動(dòng)

          1. WQPlaySound *sound = [[WQPlaySound alloc]initForPlayingVibrate];  
          2. [sound play];  

          2.2系統(tǒng)音效,以Tock為例

          1. WQPlaySound *sound = [[WQPlaySound alloc]initForPlayingSystemSoundEffectWith:@"Tock" ofType:@"aiff"];  
          2. [sound play];  

          2.3自定義音效,將tap.aif音頻文件加入到工程

          1. WQPlaySound *sound = [[WQPlaySound alloc]initForPlayingSoundEffectWith:@"tap.aif"];  
          2. [sound play];  

          tap.aif音頻文件樣例下載點(diǎn)擊

          posted @ 2012-08-16 22:26 張慧 閱讀(7776) | 評(píng)論 (0)編輯 收藏

           狀態(tài)圖主要描述一個(gè)對象在其生命周期內(nèi)的狀態(tài)變化,對象由事件驅(qū)動(dòng)并滿足一定的條件從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài)。狀態(tài)圖顯示了一個(gè)狀態(tài)機(jī)。


          下面是一個(gè)表示借書的狀態(tài)圖(描述書的狀態(tài)轉(zhuǎn)換)



          狀態(tài)圖都由哪些元素組成呢?

          一、初始狀態(tài)


                初始狀態(tài)是狀態(tài)機(jī)的起始位置,它不需要事件的觸發(fā)。一個(gè)狀態(tài)圖只能有一個(gè)初始狀態(tài)。狀態(tài)圖總是以初始狀態(tài)開始,以終止?fàn)顟B(tài)結(jié)束

          二、狀態(tài)


          狀態(tài)是對象執(zhí)行某項(xiàng)活動(dòng)或等待某個(gè)事件時(shí)的條件。狀態(tài)可以由以下幾部分組成:

          1、Name:狀態(tài)名稱
          2、Entry/Exit Action:進(jìn)入和退出動(dòng)作
          3、Internal Transition:內(nèi)部轉(zhuǎn)移(對事件作出響應(yīng),執(zhí)行一定的動(dòng)作,但不會(huì)發(fā)生狀態(tài)的轉(zhuǎn)換)
          4、Do:狀態(tài)保持不變時(shí)執(zhí)行的動(dòng)作
          5、SubStage:子狀態(tài)(當(dāng)狀態(tài)是復(fù)合狀態(tài)時(shí))
          6、Deferred Event:延遲事件(未在本狀態(tài)中處理,但不被丟棄,而是延遲到其它狀態(tài)中處理的事件)


          下面是一個(gè)燈的點(diǎn)燃狀態(tài)的例子


                 如果一個(gè)狀態(tài)比較復(fù)雜,那么它還可以擁有子狀態(tài),拿上面借書的例子,書的被借狀態(tài)又可包含兩個(gè)子狀態(tài):被正常借、被續(xù)借


          三、轉(zhuǎn)移

                上面已經(jīng)講過了一種特殊的轉(zhuǎn)移:內(nèi)部轉(zhuǎn)移,但是這種轉(zhuǎn)移只是響應(yīng)一定的事件,執(zhí)行一定的動(dòng)作,并不會(huì)放生狀態(tài)的轉(zhuǎn)移
          下面介紹一下一般轉(zhuǎn)移的格式:


          狀態(tài)的轉(zhuǎn)移一般由三部分組成

          1、event(事件):觸發(fā)狀態(tài)轉(zhuǎn)移的原因
          2、Guard Condition(保衛(wèi)條件):是一個(gè)布爾表達(dá)式,當(dāng)事件被觸發(fā)時(shí)要判斷保衛(wèi)條件的值,值為True才會(huì)發(fā)生狀態(tài)的轉(zhuǎn)換
          3、Action(活動(dòng)):狀態(tài)轉(zhuǎn)換時(shí)執(zhí)行的活動(dòng)

          下面是一個(gè)電水壺?zé)臓顟B(tài)轉(zhuǎn)換


                 當(dāng)事件turn on放生時(shí),只有水壺內(nèi)有水(have water)才能由off狀態(tài)轉(zhuǎn)換到on狀態(tài),并發(fā)生燒水的動(dòng)作(Boiling Water)。其實(shí)動(dòng)作也可以放在on狀態(tài)中。

          四、結(jié)束狀態(tài)



          結(jié)束狀態(tài)表示狀態(tài)機(jī)執(zhí)行結(jié)束或?qū)ο笊慕K結(jié),一個(gè)狀態(tài)圖可以有多個(gè)結(jié)束狀態(tài)


                在實(shí)際的應(yīng)用中,不必為每個(gè)對象都創(chuàng)建狀態(tài)圖,而是只為那些比較復(fù)雜的,狀態(tài)比較多的對象創(chuàng)建狀態(tài)圖。狀態(tài)圖是一種很有用的圖,它可以幫助我們分析復(fù)雜對象的狀態(tài)轉(zhuǎn)換和對象在什么時(shí)候執(zhí)行什么樣的動(dòng)作。網(wǎng)上購物過程中,我們會(huì)經(jīng)常查看訂單的狀態(tài),描述訂單的狀態(tài)機(jī)就是一個(gè)比較經(jīng)典的狀態(tài)圖,網(wǎng)上有很多關(guān)于訂單狀態(tài)圖的例子,大家可以查一下,我在這里就不再贅述了。
          posted @ 2012-08-08 23:38 張慧 閱讀(6927) | 評(píng)論 (0)編輯 收藏

          1. 為什么要時(shí)間管理    曾經(jīng)有過這樣一個(gè)報(bào)道:有一名記者隨機(jī)采訪了幾個(gè)人,問了這樣一個(gè)問題:
              你認(rèn)為你的時(shí)間是由自己來掌控的嗎?得到的回答卻是這樣的:
              如今各種競爭如此激烈,能拉到一個(gè)客戶不容易,只要客戶一個(gè)電話,我就馬上要出現(xiàn),我的時(shí)間完全由客戶掌控。
              我只不過是一名普通的小職員,主管給我安排什么我就做什么。自己掌控時(shí)間?!等我當(dāng)了經(jīng)理再說吧。
              我總是有忙不完的工作,哪還來得及自己安排時(shí)間?別開玩笑了。
              在這樣一個(gè)信息爆炸的社會(huì)里,我不抓緊時(shí)間充電就會(huì)落后了,現(xiàn)在是時(shí)間在控制我啊!
              相信你對這個(gè)問題會(huì)有自己的見解,但是仔細(xì)想想你的答案是否跟他們的很類似呢?像他們一樣,也有這樣的困惑或是感受呢?之所以有這樣的困惑,有一個(gè)最主要的因素在影響著我們,這個(gè)因素是什么呢?
              職位?競爭?時(shí)間?
              每個(gè)人的時(shí)間總是不夠用,人們渴望找到一種靈丹妙藥,徹底改變自己時(shí)間不夠用的局面。你是否也是這里的一員呢?

          2. 概述    時(shí)間是一種資源,我們無法對它進(jìn)行買賣,不可能與別人分享或是從別人那里獲得,也不可能得到更多或是擁有更少。
              每天,我們每一個(gè)人都擁有相同數(shù)量的時(shí)間——24小時(shí),差別在于我們用它來做什么。之所以每個(gè)人會(huì)有種種的困惑,究其原因,是因?yàn)榇蠖鄶?shù)人在時(shí)間的管理上存在著很多誤區(qū),只有消除這些誤區(qū),才有可能讓我們把時(shí)間管理得更好、更有效。
              我們現(xiàn)在就一起去看看這些誤區(qū)都是什么樣的吧!

          3. 誤區(qū)展示    當(dāng)你的工作中出現(xiàn)問題時(shí),你認(rèn)為是什么原因造成的?
              無論,你的實(shí)際情況是怎么樣的,往往我們都忽略了一個(gè)最關(guān)鍵的問題,那就是“時(shí)間”。
              因?yàn)闀r(shí)間的不充足而沒來得及做這個(gè)或是做那個(gè),導(dǎo)致最后的結(jié)果總是不盡如人意。所以,每個(gè)人在時(shí)間管理上都或多或少存在一定的問題,這也是接下來我們要解決的問題。請點(diǎn)擊下一頁吧。

          4. 反思    這個(gè)世界上根本不存在“沒時(shí)間”這回事。
              如果你跟很多人一樣,也是因?yàn)?#8220;太忙”而沒時(shí)間完成自己的工作的話,那請你一定記住,在這個(gè)世界上還有很多人,他們比你更忙,結(jié)果卻完成了更多的工作。這些人并沒有比你擁有更多的時(shí)間,他們只是學(xué)會(huì)了如何更好地利用自己的時(shí)間而已!有效的利用時(shí)間是一種人人都可以掌握的技巧——就像開車一樣。
              因此,希望大家能通過這門課程的學(xué)習(xí),在今后的生活中有效的珍惜時(shí)間,而一旦把握好時(shí)間,你就掌握了自己的生命,并能夠?qū)⑵鋬r(jià)值發(fā)揮到極限。

          5. 時(shí)間管理課程概述    在本課程中,將通過四個(gè)方面的內(nèi)容幫助你更好的掌握自己的時(shí)間,而不是成為時(shí)間的奴隸,從而讓你實(shí)現(xiàn)自己的人生目標(biāo)。
              首先,我們要談?wù)勅松繕?biāo),也就是我們花了時(shí)間都做了些什么,比如你想成為什么樣的人,你將來要達(dá)到一種什么樣的成就等。
              第二、當(dāng)你有了明確的人生目標(biāo),那該用什么方法來實(shí)現(xiàn)呢,也就是接下來要講的時(shí)間管理的核心思想“時(shí)間管理矩陣”等。
              第三、了解了如何管理時(shí)間,那么接下來要介紹的是怎么來自我管理。如何利用好每一天的時(shí)間來幫助我們實(shí)現(xiàn)人生的大目標(biāo)。
              最后,就是學(xué)會(huì)利用工具來管理時(shí)間。
              總而言之,對于你來說,這個(gè)世界上沒有任何東西比時(shí)間更加重要了。每個(gè)人的時(shí)間都是相同的,我們每個(gè)人每個(gè)星期都只有168個(gè)小時(shí),不可能有更多的時(shí)間。
              這門課程可以幫助你更有效的利用這些時(shí)間。
              讓我們開始吧!

          6. 概述    時(shí)間我們無法隨意的讓它變大或是縮小,我們也不能像存錢一樣把時(shí)間儲(chǔ)備起來,以備不時(shí)之需;更不能用其它的東西來代替,甚至我們更不能把已經(jīng)失去的時(shí)間像倒帶子一樣,有選擇性的倒回來或是快放。
              因此,當(dāng)人們無所事事,或者忙得暈頭轉(zhuǎn)向卻不見成效時(shí),應(yīng)該暫時(shí)停下來審視一下自己的時(shí)間利用效率,審視一下自己在時(shí)間中所處的角色,尋找一條更為合適的途徑,實(shí)現(xiàn)自己的目標(biāo),追求自己的人生價(jià)值。
              在經(jīng)理人的所有管理技能中,時(shí)間管理最容易被忽略。初級(jí)經(jīng)理人從員工的崗位過渡到管理者的崗位,比較容易忽略管理的角色和時(shí)間管理的技能,而中、高級(jí)管理者的工作時(shí)間更忙碌,工作任務(wù)更多,時(shí)間效率的管理也就顯得更加重要。

          7. 案例    假設(shè)一個(gè)人的生命中有三枚硬幣,第一枚代表財(cái)富,第二枚代表健康,第三枚代表時(shí)間,請問哪一個(gè)更重要?
              無論你選擇了什么,我們來逐一分析一下吧。

          8. 分析一    這三枚硬幣哪個(gè)更重要呢?
              第一種情況:
              通常人們都趨向于追求財(cái)富,如果在這三枚硬幣中,把代表財(cái)富的硬幣拿掉,則表示這個(gè)人有足夠多的健康,也有足夠多的時(shí)間,他有可能重新去創(chuàng)業(yè),贏得財(cái)富,把代表財(cái)富的硬幣重新放進(jìn)自己的生命中。
              你贊成這個(gè)說法嗎?
              贊成    不贊成
              無論你選擇了什么,我們來看一個(gè)實(shí)例:
              房地產(chǎn)大亨李嘉誠,相信你一定聽說過吧!
              17歲獨(dú)自外出闖蕩,經(jīng)商60多年,建立起亞洲最大的商業(yè)王國。 
              李嘉誠現(xiàn)在年過八旬仍然精神矍鑠,思維敏捷。他說:“健康就好似堤壩一樣,如果快要崩堤了再做補(bǔ)救,花費(fèi)多少人力物力可能救不回來。”
              問到成功秘訣時(shí),李嘉誠認(rèn)為惜時(shí)如金,是他的一個(gè)成功秘訣,李嘉誠每天清晨不到6點(diǎn)就起床了,中午不睡午覺,晚上睡覺前還要看書。
              李嘉誠認(rèn)為:在商業(yè)競爭中,你輸了,那么你輸在時(shí)間;反之,你贏了,也贏在時(shí)間。

          9. 分析二    第二種情況:
              如果在這三枚硬幣中,把代表健康的硬幣拿掉,這表示這個(gè)人有足夠多的財(cái)富,也有足夠多的時(shí)間,則他可以花費(fèi)無以計(jì)數(shù)的金錢來治療自己的疾病,至少可以拖延一定的時(shí)間,或借助高科技手段來延長生命,他可能把代表健康的硬幣重新放進(jìn)自己的生命中。
              你贊成這個(gè)說法嗎?
              贊成    不贊成
              我想梅艷芳大家都聽說過吧?
              梅艷芳患癌后,每周必須接受5天的治療,光是每個(gè)月的醫(yī)藥費(fèi)就高達(dá)港幣80萬,一年下來要花近千萬港幣。她可以用財(cái)富延長自己的生命,并用這些有限的生命完成自己最后的心愿,但是健康依然離她很遙遠(yuǎn)。

          10. 分析三    第三種情況:
              如果把代表時(shí)間的硬幣拿走,讓一個(gè)人沒有自己的時(shí)間了,這時(shí)候,即使他有無數(shù)的財(cái)富,有很強(qiáng)壯的身體,可是生命留給他的只有一剎那,他無法用1億美元去換10分鐘,這就好比無數(shù)的0前面沒有了1,是沒有任何意義的,他不僅不能將代表時(shí)間的硬幣重新放進(jìn)自己的人生,而且財(cái)富和健康對他也變得毫無意義了。
              你贊成這個(gè)說法嗎?
              贊成    不贊成
              無論你選擇的是什么,時(shí)間對我們確實(shí)很重要。
              大家都知道,秦始皇是第一位統(tǒng)一六國并實(shí)現(xiàn)了文化及貨幣統(tǒng)一的皇帝。
              他為了讓自己永遠(yuǎn)穩(wěn)坐江山,就派人去尋找長生不老藥。他非常清楚時(shí)間就是生命,如果自己能永生就等于掌握了時(shí)間并永遠(yuǎn)穩(wěn)坐江山。
              最終,還是以失敗告終。即便他有再多的財(cái)富與健康的體魄,他依然無法實(shí)現(xiàn)永生的愿望。因?yàn)闀r(shí)間不會(huì)根據(jù)任何人的愿望而改變。

          11. 總結(jié)    總之,對于所有的人,尤其是經(jīng)理人、企業(yè)家,他們有大量的金錢,可是他們感到最缺的還是時(shí)間,所以對時(shí)間的要求就更高,這就需要良好的時(shí)間管理。時(shí)間管理就是有效地應(yīng)用時(shí)間這種資源以便我們有效地取得個(gè)人的重要目標(biāo)。
              接下來,就讓我們一起來學(xué)習(xí)有關(guān)個(gè)人目標(biāo)的內(nèi)容吧。

          12. 自我時(shí)間狀態(tài)判斷    學(xué)習(xí)了時(shí)間管理的重要性和概念,現(xiàn)在我們一起應(yīng)用這些知識(shí)來分析一下你自己吧!

          13. 拖延商數(shù)測試    在回答這些問題時(shí),一方面是為了讓你重新認(rèn)識(shí)一下自己,另一方面這些可能也是你浪費(fèi)時(shí)間的原因。
              現(xiàn)在請做一個(gè)測試,看看你做事的拖延情況究竟如何吧。
              你的拖延情況嚴(yán)重嗎?
              做事拖延,會(huì)嚴(yán)重浪費(fèi)你的時(shí)間,一起來看看浪費(fèi)時(shí)間的因素具體是哪些吧。時(shí)間盜賊:(找東西、懶惰,時(shí)斷時(shí)續(xù),一個(gè)人包打天下,偶發(fā)延誤,惋惜不已/做白日夢,拖拖拉拉,對問題缺乏理解就匆忙行動(dòng),消極情緒,分不清輕重緩急)

          14. 小結(jié)    至此,我們已經(jīng)了解了時(shí)間管理的誤區(qū)有哪些,以及時(shí)間管理的定義、必要性,同時(shí)通過測試對自己有了新的認(rèn)識(shí)。
              如果你確認(rèn)對上述內(nèi)容已經(jīng)完全掌握,就請開始下一章的學(xué)習(xí)吧!

          15. 概述  你有人生目標(biāo)嗎?請你試著回答下面的問題:
            你現(xiàn)在是把時(shí)間真正用在你想做的事情上了嗎?
            你是在“原地踏步”嗎?
            你正在左右為難——是前進(jìn)還是放慢腳步,或者正在猶豫不決?
            如果你不能把時(shí)間用來去實(shí)現(xiàn)你認(rèn)為最重要的目標(biāo)的話,那么你就要對其進(jìn)行調(diào)整。現(xiàn)在請點(diǎn)擊下一頁讓我來幫助你一起回答以上這些問題吧。

          16. 為什么需要目標(biāo)    為什么要設(shè)定人生目標(biāo)呢?
              許多人拼命埋頭苦干,卻不知所為何來,到頭來卻發(fā)現(xiàn)追求的梯子搭錯(cuò)了墻,懊悔不已,只可惜為時(shí)已晚,之所以有的人總是很忙碌,而做的事情卻沒有太大意義,就是因?yàn)樗麄儧]有一個(gè)明確的目標(biāo)。
              你現(xiàn)在處于最理想的狀態(tài)嗎?
              最理想的狀態(tài)是指,你所做的每件事對你都是有價(jià)值的——其價(jià)值在于它積極推動(dòng)你實(shí)現(xiàn)職業(yè)上的或是個(gè)人生活上的目標(biāo)——這些事情都是你希望可以完成的。沒有其他人可以替你做決定,你必須得明確什么事情對于你來說才是最重要的。
              需要注意的是,實(shí)現(xiàn)目標(biāo),需要一個(gè)過程。而在過程中的每一個(gè)階段,都會(huì)有一個(gè)階段性目標(biāo),越往后發(fā)展,階段性目標(biāo)就越接近最終目標(biāo)。正是通過每一個(gè)階段性目標(biāo)的成功實(shí)現(xiàn),才能實(shí)現(xiàn)最終目標(biāo)。因此,目標(biāo)永遠(yuǎn)指明了前進(jìn)的方向。
              現(xiàn)在你明白為什么需要目標(biāo)了嗎?
              請繼續(xù)學(xué)習(xí)后面的內(nèi)容吧。

          17. 人生目標(biāo)序言    大人們總喜歡問自己的孩子:你長大了想做什么啊?
              小孩子會(huì)毫不猶豫的說:
              “我要像爸爸一樣,當(dāng)一名建筑工程師……”
              “我要當(dāng)一名科學(xué)家或是一名作家……”
              “我要像媽媽一樣,當(dāng)一名醫(yī)生……”
              “我要當(dāng)一名警察或者天文學(xué)家……”
              “我要當(dāng)一名宇航員,飛上太空……”
               …… …… ……
              各種各樣的回答,都代表了孩子的一個(gè)人生目標(biāo)。
              你認(rèn)為這些目標(biāo)可以更改嗎?
              無論你的目標(biāo)是否發(fā)生變化,時(shí)間都會(huì)一分一秒的過去,這是一個(gè)不變的規(guī)律。

          18. 要明確人生目標(biāo)    為了加深你對目標(biāo)的理解,一起來看看這樣一組調(diào)查數(shù)據(jù)。
              表中列出了某一年哈佛大學(xué)400名學(xué)生及他們畢業(yè)后25年的調(diào)查數(shù)據(jù)。那些沒有目標(biāo)的人,結(jié)果是生活在社會(huì)的底層,而那些目標(biāo)明確的人,都生活在社會(huì)的中上層。令人深思的是,這些人的起點(diǎn)幾乎是一樣的,然而,正是因?yàn)槟繕?biāo)這一因素導(dǎo)致了巨大的結(jié)果差異。可見,目標(biāo)對人生的影響是多么的巨大。
              到這里,我想問你一個(gè)問題,你有長期或者短期的目標(biāo)嗎?
              有沒有不重要,希望從這一刻開始,你要為自己設(shè)定明確且合理的長期與短期目標(biāo)。
              現(xiàn)在,請寫出你的人生目標(biāo):
              請拿出幾張紙,一支鉛筆或鋼筆,一只帶有秒針的手表或時(shí)鐘,為自己設(shè)定15分鐘時(shí)間。在紙的最上端寫下問題。

          19. 你的人生目標(biāo)到底是什么?    第一個(gè)問題:
              你的人生目標(biāo)到底是什么?
              用第一人稱、現(xiàn)在時(shí)、肯定語氣來寫,這樣,這些目標(biāo)就能立即進(jìn)入你的潛意識(shí)中。
              不要害怕寫出那些看起來距離自己很遙遠(yuǎn)的目標(biāo)。這些目標(biāo)可以是有形的或是無形的。
              比如說登上珠穆朗瑪峰、去參加馬拉松長跑、休假一年、退休后在意大利建一座房子、買艘游艇、購買一輛寶馬轎車;擁有一個(gè)美滿幸福的三口之家,自己能擁有一個(gè)健康的身體……這些都可以列出來,同時(shí)請列出優(yōu)先順序。

          20. 如何度過今后三年    第二個(gè)問題:
              如何度過今后三年?
              三年的時(shí)間,看似很長,那么在這么長的時(shí)間里你能做些什么呢?
              你可以寫下一些比較空泛的目標(biāo),比如說“獲得幸福”、“取得成功”、“贏得愛情”、“為社會(huì)做貢獻(xiàn)”、“讀完30本書”、“游遍30個(gè)國家”等等。

          21. 只能活六個(gè)月你該怎樣渡過    第三個(gè)問題:
              只能活六個(gè)月怎樣度過?
              如果你知道自己會(huì)在六個(gè)月后因?yàn)椴∧У那秩攵ド銜?huì)怎樣度過這六個(gè)月的時(shí)間?你可以從不同的角度去想。
              請注意:這意味著你的人生只剩下六個(gè)月的時(shí)間,你必須充分利用這段時(shí)間做一些你覺得最重要或者自己一直都想做而沒做的事情。

          22. 三個(gè)問題之間的思考    你可以花上至少兩分鐘的時(shí)間,仔細(xì)斟酌并修改你對以上三個(gè)問題的回答。如果愿意,你也可以花上更多的時(shí)間。
              同時(shí),請你認(rèn)真思考一下這三個(gè)問題之間的關(guān)系是怎樣的?
              現(xiàn)在我們來分析一下這三個(gè)問題:第一個(gè)可以看作是長期目標(biāo)、第二個(gè)是短期目標(biāo)、第三個(gè)是被分解后的目標(biāo)。
              你可能會(huì)發(fā)現(xiàn)第二個(gè)問題的答案其實(shí)是第一個(gè)問題答案的延伸,還有一些人發(fā)現(xiàn)自己在第三個(gè)問題上的答案跟前兩個(gè)問題的答案截然不同——那是因?yàn)樗麄兺蝗灰庾R(shí)到自己的時(shí)間不多了,必須在有限的時(shí)間內(nèi)完成最重要、最緊急的事情。

          23. 如何設(shè)定人生目標(biāo)    了解為什么設(shè)定人生目標(biāo)后,現(xiàn)在我們就來學(xué)習(xí)一下如何設(shè)定人生目標(biāo)吧。
              事實(shí)上,設(shè)定一個(gè)適當(dāng)?shù)哪繕?biāo)就等于達(dá)到了目標(biāo)的一部分。
              人生的大目標(biāo)也是人生大志,可能需要十年、二十年甚至終生為之奮斗。一個(gè)人不可能一口吃成一個(gè)胖子,所以我們在追求人生目標(biāo)的過程中,要時(shí)刻清楚自己現(xiàn)在做的每一件事都要有助于實(shí)現(xiàn)自己最終的目標(biāo)。
              接下來,我們就詳細(xì)講解一下如何有效地設(shè)定人生目標(biāo)。

          posted @ 2012-08-08 23:38 張慧 閱讀(1665) | 評(píng)論 (1)編輯 收藏

          本文主要簡述的內(nèi)容有單例設(shè)計(jì)模式、dom4j解析xml文件(這里解析的數(shù)據(jù)庫的配置文件)、通過解析出來的配置信息完成數(shù)據(jù)庫的連接。


          1、首先要看的是單例設(shè)計(jì)模式

                 單例設(shè)計(jì)模式的實(shí)現(xiàn)有兩種:餓漢式(預(yù)先加載)、懶漢式(延遲加載),下面分別來看這兩種實(shí)現(xiàn)方式。

          (1)、餓漢式(預(yù)先加載)

          public class Singleton{
              private static Singleton instance = new Singleton();
              
              private Singleton(){}

              public static synchronized Singleton getInstance(){
                  return instance;
              } 
          }
          (2)懶漢式(延遲加載) 

          public class Singleton{
              private static Singleton instance = null;
              
              private Singleton(){}

              public static synchronized Singleton getInstance(){
                  if(instance==null){
                       instance = new Singleton();
                  }
                  return instance;
              } 
          }

          觀察上面的這兩種模式,看起來區(qū)別并不大,前一種方式是類一旦加載就得將對象實(shí)例化了,而后一種則是在使用的時(shí)候才進(jìn)行判斷是否要實(shí)例化對象,并且在后一種的getInstance方法中加入了同步,這樣顯得更加的合理,個(gè)人更加偏好于使用第二種方式。


          2、使用dom4j來完成數(shù)據(jù)庫配置文件的解析

          給出下面這個(gè)數(shù)據(jù)庫的配置文件sys-config.xml


          <?xml version="1.0" encoding="UTF-8"?>
          <config>
              <db-info>
                  <driver>oracle.jdbc.driver.OracleDriver</driver>
                  <url>jdbc:oracle:thin:@127.0.0.1:1521:ORCL</url>
                  <user>username</user>
                  <password>password</password>
              </db-info>
          </config>

          完成解析的java類:

          (1)、保存數(shù)據(jù)庫jdbc配置信息的模型類JdbcConfig.java


          package org.ml.drp.util;

          /**
           * 用于保存數(shù)據(jù)庫連接時(shí)的jdbc參數(shù)
           * 
           * 
          @author MuLing
           * 
           
          */
          public class JdbcConfig {
              private String DbDriver;
              private String DbUrl;
              private String DbUser;
              private String DbPass;

              public String getDbDriver() {
                  return DbDriver;
              }

              public void setDbDriver(String dbDriver) {
                  DbDriver = dbDriver;
              }

              public String getDbUrl() {
                  return DbUrl;
              }

              public void setDbUrl(String dbUrl) {
                  DbUrl = dbUrl;
              }

              public String getDbUser() {
                  return DbUser;
              }

              public void setDbUser(String dbUser) {
                  DbUser = dbUser;
              }

              public String getDbPass() {
                  return DbPass;
              }

              public void setDbPass(String dbPass) {
                  DbPass = dbPass;
              }

              @Override
              public String toString() {
                  return "JdbcConfig [DbDriver=" + DbDriver + ", DbUrl=" + DbUrl
                          + ", DbUser=" + DbUser + ", DbPass=" + DbPass + "]";
              }
          }

          (2)、解析數(shù)據(jù)庫配置文件的工具類XmlConfigReader.java,這里使用單例模式完成,采用的是懶漢式。 

          package org.ml.drp.util;

          import java.io.InputStream;

          import org.dom4j.Document;
          import org.dom4j.DocumentException;
          import org.dom4j.Element;
          import org.dom4j.io.SAXReader;
          /**
           * 用于解析xml文件 
           * 
          @author MuLing
           *
           
          */
          public class XmlConfigReader {  
              
              private JdbcConfig jdbcConfig = null;
              private static XmlConfigReader instance = null
              
              private XmlConfigReader(){
                  SAXReader reader = new SAXReader();//取得SAXReader的對象
                  InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");//得到輸入流對象
                  jdbcConfig = new JdbcConfig();
                  Document doc = null;
                  try {
                      doc = reader.read(input); //進(jìn)行讀取
                  } catch (DocumentException e) { 
                      e.printStackTrace(); 
                  }
                          //取得對應(yīng)的節(jié)點(diǎn)對象
                         &nbsp;Element driverEle = (Element)doc.selectObject("/config/db-info/driver");
                  Element urlEle = (Element)doc.selectObject("/config/db-info/url");
                  Element userEle = (Element)doc.selectObject("/config/db-info/user");
                  Element passwordEle = (Element)doc.selectObject("/config/db-info/password"); 

                  jdbcConfig.setDbDriver(driverEle.getStringValue());
                  jdbcConfig.setDbUrl(urlEle.getStringValue());
                  jdbcConfig.setDbUser(userEle.getStringValue());
                  jdbcConfig.setDbPass(passwordEle.getStringValue()); 
              }
              
              public static synchronized XmlConfigReader getInstance(){
                  if(instance==null){
                      instance = new XmlConfigReader();
                  }
                  return instance;
              }
              
              public JdbcConfig getJdbcConfig(){
                  return this.jdbcConfig;
              }
          }

          3、根據(jù)解析出了的配置信息完成數(shù)據(jù)庫的連接

          下面是一個(gè)完成數(shù)據(jù)庫連接操作的測試工具類DbUtil.java


          package org.ml.drp.util;

          import java.sql.Connection;
          import java.sql.DriverManager;
          import java.sql.SQLException;

          /**
           * 封裝數(shù)據(jù)庫常用操作類
           * 
          @author MuLing
           *
           
          */
          public class DbUtil {
            
              /**
               * 取得數(shù)據(jù)庫的連接
               * 
          @return
               
          */
              public static Connection getConnection(){
                  Connection conn = null;        
                  //取得數(shù)據(jù)庫連接字符串
                  JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();
                  String DBDRIVER = jdbcConfig.getDbDriver();
                  String DBURL = jdbcConfig.getDbUrl();
                  String DBUSER = jdbcConfig.getDbUser();
                  String DBPASS = jdbcConfig.getDbPass();
                  //1:注冊驅(qū)動(dòng)
                  try {
                      Class.forName(DBDRIVER);
                  } catch (ClassNotFoundException e) { 
                      e.printStackTrace();
                  }
                  //2:獲取連接
                  try {
                      conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
                  } catch (SQLException e) { 
                      e.printStackTrace();
                  }
                  //3:返回?cái)?shù)據(jù)庫連接
                  return conn;
              }
              
              //測試數(shù)據(jù)庫的連接是否成功
              public static void main(String args[]){ 
                  System.out.println(DbUtil.getConnection());
              }
          }

          上完成了單例模式下使用dom4j來讀取數(shù)據(jù)庫配置文件,并實(shí)現(xiàn)數(shù)據(jù)庫的連接操作。 




          posted @ 2012-08-08 23:37 張慧 閱讀(1343) | 評(píng)論 (0)編輯 收藏

          常有同學(xué)想在自己課外學(xué)習(xí)的安排中,“系統(tǒng)地”學(xué)習(xí)點(diǎn)什么。這樣的事情常發(fā)生在喜歡做A專業(yè)的事,卻上了B專業(yè),且A不等于B,甚至相似度(A, B)趨于無窮。對有些同學(xué),一不留神發(fā)現(xiàn)自己的學(xué)習(xí)落后了不少,比如學(xué)計(jì)算機(jī)的,到大三了,卻發(fā)現(xiàn)連簡單程序也編不出來,再如學(xué)完高數(shù)了,才知道高數(shù)原來如此重要,于是想要系統(tǒng)地重學(xué)一遍。
            何為系統(tǒng)學(xué)習(xí)?系統(tǒng)學(xué)習(xí)就是要按照已有的一套規(guī)定,先學(xué)什么,再學(xué)什么,按步就班地走完一個(gè)流程。為什么要系統(tǒng)學(xué)習(xí)?將做事能專業(yè)些。規(guī)定從何而來?業(yè)界專家。系統(tǒng)學(xué)習(xí)有什么好處?基礎(chǔ)扎實(shí)。系統(tǒng)學(xué)習(xí)的路線?先理論,再理論指導(dǎo)實(shí)踐。
            這就怪了。當(dāng)今大學(xué)飽受批評(píng)之一在于重理論,輕實(shí)踐。而到了課外自己的安排,還也要走入這條巷子。深層的原因在于,我們要想學(xué)點(diǎn)東西,無意識(shí)地延續(xù)了一種并不是很合理的思維,學(xué)習(xí)的模式被單一化了。一邊在批評(píng)著本專業(yè)系統(tǒng)化教學(xué)中的弊端,一方面在本來不受約束的自由安排中又要去追求這種系統(tǒng)化,謬矣。
            系統(tǒng)地學(xué),意味著將開始一個(gè)比較龐大和長期的計(jì)劃。雄心勃勃地起步,灰溜溜的,或者不知不覺地停止。這種情況我經(jīng)歷了不止一次。還有一種情況是,祥林嫂式地叨叨一生:“一直想系統(tǒng)學(xué)習(xí)一下……,卻沒有機(jī)會(huì)。”
            要想滿足自己的興趣,其實(shí)很簡單,用合適的方式行動(dòng)起來即可。喜歡電子的,先買個(gè)套件,備把烙鐵,焊個(gè)收音機(jī)出來;喜歡計(jì)算機(jī)的,就先自學(xué)編個(gè)程序出來;喜歡經(jīng)濟(jì)的,讀些經(jīng)濟(jì)學(xué)著作……。系統(tǒng)學(xué)習(xí)的條件往往有些苛刻,所以不要寄望于系統(tǒng)學(xué)習(xí)。
            實(shí)際上,系統(tǒng)學(xué)習(xí)這個(gè)東東,確實(shí)用不著為之如此著迷。系統(tǒng)學(xué)習(xí)本身并沒有什么太多的道理,那是對某方面知識(shí)的套裝,是為了適應(yīng)大規(guī)模人才培養(yǎng)而用的。一旦形成系統(tǒng),也就意味著僵化,意味著單一標(biāo)準(zhǔn),在這一套東西廣為傳播的同時(shí),也為相應(yīng)的學(xué)科進(jìn)一步發(fā)展套上了枷鎖,這是一個(gè)躲不開的悖論。單按這個(gè)系統(tǒng)培養(yǎng)出來的人才,沒有特色,缺乏創(chuàng)新,這是現(xiàn)在教育的一個(gè)非常大的弊端。
            我們不能直接全盤否認(rèn)系統(tǒng)學(xué)習(xí),這種方法是有效的,也將繼續(xù)持續(xù)。需要我們每個(gè)人做的,是不單一地依賴系統(tǒng)化,要突破這個(gè)所謂的系統(tǒng),找出適合自己的辦法,進(jìn)而為這個(gè)系統(tǒng)做出貢獻(xiàn)。這就是創(chuàng)新。要?jiǎng)?chuàng)新,就一定要有人突破系統(tǒng)的制約。
            一個(gè)最簡單的問題,各行業(yè)都有個(gè)祖師爺,哪個(gè)祖師爺是科班出身,系統(tǒng)學(xué)習(xí)過的?在現(xiàn)實(shí)中,我們發(fā)現(xiàn)很多有所成就的人物往往是多面手,不能說他的每一面都是系統(tǒng)學(xué)來的。在職場中,復(fù)合型人才受歡迎,復(fù)合型人才不可以單一理解為上過幾個(gè)專業(yè),拿過幾個(gè)學(xué)位。野路子出身,被智叟們看不上的,常常能做出大的成績。
            在我理想的大學(xué)中,同學(xué)們的學(xué)習(xí)將是這樣的:他們接受著一項(xiàng)專業(yè)教育,一方面由教授系統(tǒng)地傳授著專業(yè)知識(shí),接受著一種“正規(guī)”的訓(xùn)練,另一方面,學(xué)生能夠根據(jù)自己的興趣、感覺自由地拓展,拓展的內(nèi)容有的是和系統(tǒng)相關(guān)的,有的完全是“節(jié)外生枝”。這是課內(nèi)與課外有效的結(jié)合。
            破除“系統(tǒng)學(xué)習(xí)”的情結(jié),根據(jù)自己當(dāng)前的環(huán)境、條件,首先行動(dòng)起來。在起步時(shí),著重直接的體驗(yàn),而專門的理論。在整個(gè)過程中,看重自己的感受,而不是專家的觀點(diǎn)。堅(jiān)持下來,你將有能力自由出入這個(gè)系統(tǒng),面對的是更為廣闊的空間。沒有經(jīng)過系統(tǒng)學(xué)習(xí),實(shí)在不能不說是一件值得慶幸的事。
            有條件系統(tǒng)學(xué)習(xí),或許可以樂一樂;而沒有條件系統(tǒng)學(xué)習(xí)的,一定不要糾結(jié)。

            有條件進(jìn)入了系統(tǒng)學(xué)習(xí)軌道的,也要常想著“搗亂”,往系統(tǒng)外沖一沖。沒有條件以系統(tǒng)學(xué)習(xí)開始的,不妨在野路子起步,甚至成為高手后,往系統(tǒng)這邊看一看,這會(huì)讓你上到一個(gè)新的境界。


          總結(jié)一下:能進(jìn)入系統(tǒng)學(xué)習(xí)軌道的人是幸運(yùn)的,但也要提防著“系統(tǒng)”給你造成的限制;既然沒有條件系統(tǒng)學(xué)習(xí)的,就不要去干等,先動(dòng)起來再說。

          posted @ 2012-08-08 23:33 張慧 閱讀(1498) | 評(píng)論 (5)編輯 收藏

          文章的樓主連左值都可以運(yùn)算,還若無其事得當(dāng)作可以編譯,在那講解,若無其事就算了,可以當(dāng)做沒有發(fā)現(xiàn)編譯問題,但是那講解也太誤導(dǎo)人了吧?然后我跟帖的樓下還出現(xiàn)一個(gè)“石破天”,以教導(dǎo)式的口吻,在那講解,不知道的人豈不是就信了嗎?真真一群害人之馬,當(dāng)然我只是指其中幾位,很多跟帖的朋友,我自認(rèn)還是不如的。

          就為了這個(gè)影響廣泛的害人帖子(在csdn上彈框出來,影響能不小嗎?),我也來探討一下i++,我是菜鳥,我不會(huì)用教導(dǎo)式口吻來講解。

          首先說文章樓主提到的

          if((i++=j++)!=4){}  

          看到這句代碼我真想噴,因?yàn)檫@讓我對自己產(chǎn)生了不自信,還去編譯了一下,果然是錯(cuò)誤的,左邊怎么能夠進(jìn)行運(yùn)算呢?樓主真強(qiáng)大...為什么昨天沒有寫文章,沒有情緒激動(dòng),因

          為我知道C++風(fēng)格也是這樣賦值,不知道能不能編譯過去,但是今天看到跟帖的朋友說,VC98過不去,DEV-C++也過不去,我才感到真有一種被耍的感覺。“左值能運(yùn)算嗎?What  the hell!"這一句,只是罵我自己懷疑自己,沒有對其他任何人。

          假設(shè),樓主是手誤,咱們來一個(gè)正確的能編譯的代碼討論一下:

          int i=4,j=3;   
          if((i = j++) != 4) {}  

          j++的具體動(dòng)作應(yīng)該是怎樣的,我想看過《Thinking in Java》的朋友都掌握得還不錯(cuò),如果實(shí)在想找更深入一點(diǎn)探討i++的書,個(gè)人看過《Java程序員面試寶典》,里面有提到i++這個(gè)部分,講得很仔細(xì)。j++,是一個(gè)依賴于java里面的“中間緩存變量機(jī)制”來實(shí)現(xiàn)的,很多人都會(huì)念++在前就是“先加后賦”,++在后就是“先賦后加”,但是這個(gè)“賦”和這個(gè)“加”是針對哪個(gè)對象呢,有幾個(gè)人能清楚的解釋?“寶典”這本書上面的解釋,個(gè)人覺得非常好,就來這里秀一段。首先,像文章中2樓所說那樣:++的時(shí)間是以整個(gè)語句為衡量的,所以,什么時(shí)候自增,跟一整句運(yùn)算語句有關(guān),現(xiàn)在的情況是 i = j++:這樣一句應(yīng)該被拆分為:

           

          temp = j;//先賦
          j = j + 1;//后加
          i = temp;

           

          再來一個(gè)i = ++j:這一句應(yīng)該被拆分為:

          j = j + 1;//先加
          temp = j;//后賦
          i = temp;

          用這樣的語句,來解釋“賦”跟“加”應(yīng)該是很明了的吧?記住,“加”只涉及了本身,“賦”涉及本身和中間緩存變量。

          如何理解“++的時(shí)間是以整個(gè)語句為衡量的”?咱們來一段復(fù)雜的就可以很好地理解了,就拿那個(gè)被我噴的“石破天”的吧。

           

          /* 這個(gè)是原式,尊重版權(quán),但是誤導(dǎo)人*/
          int i=10;
          i=i++ + i++;//20  --這里應(yīng)該會(huì)是21,note by jacob
          i=++i + ++i;//44  --這里應(yīng)該會(huì)是45,note by jacob
           

           

          首先咱們把這都拆開來理解:

          /* 細(xì)說第一個(gè) i = i++ + i ++; */
          temp1 = i;//temp1 == 10
          i = i + 1;//i == 11;
          temp2 = i;//temp2 == 11
          i = i + 1;//i == 12;
          i = temp1 + temp2;//i == 21

          /*第二個(gè) i = ++i + ++i;*/
          i = i + 1;
          temp1 = i;
          i = i + 1;
          temp2 = i;
          i = temp1 +temp2;


          這樣的例子,應(yīng)該算是比較復(fù)雜的吧?如果需要,還可以來一個(gè)更加復(fù)雜的,不過不再詳細(xì)解釋,大家可以拿來推敲一下:

          int j =0,k = 0,h=0;
          k = k++ + k++ + k++ + ++k;//k == 7
          j = ++j + j++ + j++ + j++;//j ==7;
          h = ++h + ++h;
          posted @ 2012-08-01 21:56 張慧 閱讀(2834) | 評(píng)論 (1)編輯 收藏

           這段時(shí)間遇到一個(gè)問題:使用ajax生成一個(gè)列表,然后使用sorttable.js對這個(gè)列表進(jìn)行排序。問題在于:生成的列表還沒出現(xiàn),排序已經(jīng)開始了,結(jié)果沒有找到列表報(bào)錯(cuò)。解決方法: 
           function ifExist(table){
              if(table.tBodies[0]==null)
             {
            setTimeout( function(){ifExist(table);}, 1000);  
             }
             else
             {
            sorttable.makeSortable(table);
             }
           }

          判斷節(jié)點(diǎn)是否生成了,如果沒有,那么就等待1秒,再循環(huán)執(zhí)行。一切ok了!

           

          最后,補(bǔ)充一下關(guān)于javascript同步和異步的問題(轉(zhuǎn)載):

          一、同步加載與異步加載的形式
          1. 同步加載
          我們平時(shí)最常使用的就是這種同步加載形式:
          <script src="http://yourdomain.com/script.js"></script> 
          同步模式,又稱阻塞模式,會(huì)阻止瀏覽器的后續(xù)處理,停止了后續(xù)的解析,因此停止了后續(xù)的文件加載(如圖像)、渲染、代碼執(zhí)行。
          js 之所以要同步執(zhí)行,是因?yàn)?js 中可能有輸出 document 內(nèi)容、修改dom、重定向等行為,所以默認(rèn)同步執(zhí)行才是安全的。
          以前的一般建議是把<script>放在頁面末尾</body>之前,這樣盡可能減少這種阻塞行為,而先讓頁面展示出來。
          簡單說:加載的網(wǎng)絡(luò) timeline 是瀑布模型,而異步加載的 timeline 是并發(fā)模型。

          2. 常見異步加載(Script DOM Element)

          (function() {      var s = document.createElement('script');      s.type = 'text/javascript';      s.async = true;      s.src = 'http://yourdomain.com/script.js';      var x = document.getElementsByTagName('script')[0];      x.parentNode.insertBefore(s, x);  })();

          異步加載又叫非阻塞,瀏覽器在下載執(zhí)行 js 同時(shí),還會(huì)繼續(xù)進(jìn)行后續(xù)頁面的處理。
          這種方法是在頁面中<script>標(biāo)簽內(nèi),用 js 創(chuàng)建一個(gè) script 元素并插入到 document 中。這樣就做到了非阻塞的下載 js 代碼。
          async屬性是HTML5中新增的異步支持,見后文解釋,加上好(不加也不影響)。
          此方法被稱為 Script DOM Element 法,不要求 js 同源。
          將js代碼包裹在匿名函數(shù)中并立即執(zhí)行的方式是為了保護(hù)變量名泄露到外部可見,這是很常見的方式,尤其是在 js 庫中被普遍使用。
          例如 Google Analytics 和 Google+ Badge 都使用了這種異步加載代碼:
          (function() {      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);  })();  
          (function()
              {var po = document.createElement("script");     po.type = "text/javascript"; po.async = true;po.src = "https://apis.google.com/js/plusone.js";     var s = document.getElementsByTagName("script")[0];     s.parentNode.insertBefore(po, s);  })();  
          但是,這種加載方式在加載執(zhí)行完之前會(huì)阻止 onload 事件的觸發(fā),而現(xiàn)在很多頁面的代碼都在 onload 時(shí)還要執(zhí)行額外的渲染工作等,所以還是會(huì)阻塞部分頁面的初始化處理。

          3. onload 時(shí)的異步加載

          (function() {      function async_load(){          var s = document.createElement('script');          s.type = 'text/javascript';          s.async = true;          s.src = 'http://yourdomain.com/script.js';          var x = document.getElementsByTagName('script')[0];          x.parentNode.insertBefore(s, x);      }      if (window.attachEvent)          window.attachEvent('onload', async_load);      else          window.addEventListener('load', async_load, false);  })();  
          這和前面的方式差不多,但關(guān)鍵是它不是立即開始異步加載 js ,而是在 onload 時(shí)才開始異步加載。這樣就解決了阻塞 onload 事件觸發(fā)的問題。
          補(bǔ)充:DOMContentLoaded 與 OnLoad 事件
          DOMContentLoaded : 頁面(document)已經(jīng)解析完成,頁面中的dom元素已經(jīng)可用。但是頁面中引用的圖片、subframe可能還沒有加載完。
          OnLoad:頁面的所有資源都加載完畢(包括圖片)。瀏覽器的載入進(jìn)度在這時(shí)才停止。
          這兩個(gè)時(shí)間點(diǎn)將頁面加載的timeline分成了三個(gè)階段。

          4.異步加載的其它方法

          由于Javascript的動(dòng)態(tài)特性,還有很多異步加載方法:
          • XHR Eval
          • XHR Injection
          • Script in Iframe
          • Script Defer
          • document.write Script Tag
          • 還有一種方法是用 setTimeout 延遲0秒 與 其它方法組合。
          XHR Eval :通過 ajax 獲取js的內(nèi)容,然后 eval 執(zhí)行。
          var xhrObj = getXHRObject();   xhrObj.onreadystatechange =      function() {        if ( xhrObj.readyState != 4 ) return;       eval(xhrObj.responseText);     };   xhrObj.open('GET', 'A.js', true);   xhrObj.send('');  
          Script in Iframe:創(chuàng)建并插入一個(gè)iframe元素,讓其異步執(zhí)行 js 。
          var iframe = document.createElement('iframe');   document.body.appendChild(iframe);   var doc = iframe.contentWindow.document;   doc.open().write('<body onload="insertJS()">');   doc.close();  
          GMail Mobile:頁內(nèi) js 的內(nèi)容被注釋,所以不會(huì)執(zhí)行,然后在需要的時(shí)候,獲取script元素中 text 內(nèi)容,去掉注釋后 eval 執(zhí)行。
          <script type="text/javascript">   /*   var ...    */   </script>  
          詳見參考資料中2010年的Velocity 大會(huì) Steve Souders 和淘寶的那兩個(gè)講義。
          二、async 和 defer 屬性
          1. defer 屬性
          <script src="file.js" defer></script> 
          defer屬性聲明這個(gè)腳本中將不會(huì)有 document.write 或 dom 修改。
          瀏覽器將會(huì)并行下載 file.js 和其它有 defer 屬性的script,而不會(huì)阻塞頁面后續(xù)處理。
          defer屬性在IE 4.0中就實(shí)現(xiàn)了,超過13年了!Firefox 從 3.5 開始支持defer屬性 。
          注:所有的defer 腳本保證是按順序依次執(zhí)行的。
          2. async 屬性
          <script src="file.js" async></script> 
          async屬性是HTML5新增的。作用和defer類似,但是它將在下載后盡快執(zhí)行,不能保證腳本會(huì)按順序執(zhí)行。它們將在onload 事件之前完成。
          Firefox 3.6、Opera 10.5、IE 9 和 最新的Chrome 和 Safari 都支持 async 屬性。可以同時(shí)使用 async 和 defer,這樣IE 4之后的所有 IE 都支持異步加載。
          3. 詳細(xì)解釋
          <script> 標(biāo)簽在 HTML 4.01 與 HTML5 的區(qū)別:
          • type 屬性在HTML 4中是必須的,在HTML5中是可選的。
          • async 屬性是HTML5中新增的。
          • 個(gè)別屬性(xml:space)在HTML5中不支持。
          說明:
          1. 沒有 async 屬性,script 將立即獲取(下載)并執(zhí)行,然后才繼續(xù)后面的處理,這期間阻塞了瀏覽器的后續(xù)處理。
          2. 如果有 async 屬性,那么 script 將被異步下載并執(zhí)行,同時(shí)瀏覽器繼續(xù)后續(xù)的處理。
          3. HTML4中就有了defer屬性,它提示瀏覽器這個(gè) script 不會(huì)產(chǎn)生任何文檔元素(沒有document.write),因此瀏覽器會(huì)繼續(xù)后續(xù)處理和渲染。
          4. 如果沒有 async 屬性 但是有 defer 屬性,那么script 將在頁面parse之后執(zhí)行。
          5. 如果同時(shí)設(shè)置了二者,那么 defer 屬性主要是為了讓不支持 async 屬性的老瀏覽器按照原來的 defer 方式處理,而不是同步方式。
          另參見官方說明:script async
          個(gè)人補(bǔ)充:
          既然 HTML5 中已經(jīng)支持異步加載,為什么還要使用前面推薦的那種麻煩(動(dòng)態(tài)創(chuàng)建 script 元素)的方式?
          答:為了兼容尚不支持 async 老瀏覽器。如果將來所有瀏覽器都支持了,那么直接在script中加上async 屬性是最簡單的方式。
          三、延遲加載(lazy loading)
          前面解決了異步加載(async loading)問題,再談?wù)勈裁词茄舆t加載。
          延遲加載:有些 js 代碼并不是頁面初始化的時(shí)候就立刻需要的,而稍后的某些情況才需要的。延遲加載就是一開始并不加載這些暫時(shí)不用的js,而是在需要的時(shí)候或稍后再通過js 的控制來異步加載。
          也就是將 js 切分成許多模塊,頁面初始化時(shí)只加載需要立即執(zhí)行的 js ,然后其它 js 的加載延遲到第一次需要用到的時(shí)候再加載。
          特別是頁面有大量不同的模塊組成,很多可能暫時(shí)不用或根本就沒用到。
          就像圖片的延遲加載,在圖片出現(xiàn)在可視區(qū)域內(nèi)時(shí)(在滾動(dòng)條下拉)才加載顯示圖片。
          四、script 的兩階段加載 與 延遲執(zhí)行(lazy execution)
          JS的加載其實(shí)是由兩階段組成:下載內(nèi)容(download bytes)和執(zhí)行(parse and execute)。
          瀏覽器在下載完 js 的內(nèi)容后就會(huì)立即對其解析和執(zhí)行,不管是同步加載還是異步加載。
          前面說的異步加載,解決的只是下載階段的問題,但代碼在下載后會(huì)立即執(zhí)行。
          而瀏覽器在解析執(zhí)行 JS 階段是阻塞任何操作的,這時(shí)的瀏覽器處于無響應(yīng)狀態(tài)。
          我 們都知道通過網(wǎng)絡(luò)下載 script  需要明顯的時(shí)間,但容易忽略了第二階段,解析和執(zhí)行也是需要時(shí)間的。script的解析和執(zhí)行所花的時(shí)間比我們想象的要多,尤其是script  很多很大的時(shí)候。有些是需要立刻執(zhí)行,而有些則不需要(比如只是在展示某個(gè)界面或執(zhí)行某個(gè)操作時(shí)才需要)。
          這些script 可以延遲執(zhí)行,先異步下載緩存起來,但不立即執(zhí)行,而是在第一次需要的時(shí)候執(zhí)行一次。
          利用特殊的技巧可以做到 下載 與 執(zhí)行的分離 (再次感謝 javascript 的動(dòng)態(tài)特性)。比如將 JS 的內(nèi)容作為 Image或 object 對象加載緩存起來,所以就不會(huì)立即執(zhí)行了,然后在第一次需要的時(shí)候再執(zhí)行。
          此部分的更多解釋 請查看末尾參考資料中 ControlJS 的相關(guān)鏈接。
          小技巧:
          1. 模擬較長的下載時(shí)間
          寫個(gè)后端腳本,讓其 sleep 一定時(shí)間。如在 jsp 中 Thread.sleep(5000); ,這樣5秒后才能收到內(nèi)容。
          2. 模擬較長的 js 代碼執(zhí)行時(shí)間(因?yàn)檫@步一般比較快不容易觀察到):
          var t_start = Number(new Date());
          while ( t_start + 5000 > Number(new Date()) ) {}
          這個(gè)代碼將使 js 執(zhí)行5秒才能完成!
          五、script 標(biāo)簽使用的歷史

          1. script 放在 HEAD 中
          <head>   <script src=“…”></script>   </head>  
          • 阻止了后續(xù)的下載;
          • 在IE 6-7 中 script 是順序下載的,而不是現(xiàn)在的 “并行下載、順序執(zhí)行” 的方式;
          • 在下載解析執(zhí)行階段阻止渲染(rendering);
          2. script 放在頁面底部(2007)
          ...   <script src=“…”></script>   </body>  
          • 不阻止其它下載;
          • 在IE 6-7 中 script 是順序下載的;
          • 在下載解析執(zhí)行階段阻止渲染(rendering);
          3. 異步加載script(2009)
          var se = document.createElement  ('script');   se.src = 'http://anydomain.com/A.js';   document.getElementsByTagName('head')   [0].appendChild(se);  
          這就是本文主要說的方式。
          • 不阻止其它下載;
          • 在所有瀏覽器中,script都是并行下載;
          • 只在解析執(zhí)行階段阻止渲染(rendering);
          4. 異步下載 + 按需執(zhí)行 (2010)
          var se = new Image();   se.onload = registerScript();   se.src = 'http://anydomain.com/A.js';  把下載 js 與 解析執(zhí)行 js 分離出來
          • 不阻止其它下載;
          • 在所有瀏覽器中,script都是并行下載;
          • 不阻止渲染(rendering)直到真正需要時(shí);
          六、異步加載的問題
          在異步加載的時(shí)候,無法使用 document.write 輸出文檔內(nèi)容。
          在同步模式下,document.write 是在當(dāng)前 script 所在的位置輸 出文檔的。而在異步模式下,瀏覽器繼續(xù)處理后續(xù)頁面內(nèi)容,根本無法確定 document.write  應(yīng)該輸出到什么位置,所以異步模式下 document.write 不可行。而到了頁面已經(jīng) onload  之后,再執(zhí)行 document.write 將導(dǎo)致當(dāng)前頁面的內(nèi)容被清空,因?yàn)樗鼤?huì)自動(dòng)觸發(fā) document.open 方法。
          實(shí)際上document.write的名聲并不好,最好少用。
          替代方法:
          1. 雖然異步加載不能用 document.write,但還是可以onload之后執(zhí)行操作dom(創(chuàng)建dom或修改dom)的,這樣可以實(shí)現(xiàn)一些自己的動(dòng)態(tài)輸出。比如要在頁面異步創(chuàng)建一個(gè)浮動(dòng)元素,這和它在頁面中的位置就沒關(guān)系了,只要?jiǎng)?chuàng)建出該dom元素添加到 document 中即可。
          2. 如果需要在固定位置異步生成元素的內(nèi)容,那么可以在該固定位置設(shè)置一個(gè)dom元素作為目標(biāo),這樣就知道位置了,異步加載之后就可以對這個(gè)元素進(jìn)行修改。
          六、JS 模塊化管理
          異步加載,需要將所有 js 內(nèi)容按模塊化的方式來切分組織,其中就存在依賴關(guān)系,而異步加載不保證執(zhí)行順序。
          另外,namespace 如何管理 等相關(guān)問題。這部分已超出本文內(nèi)容,可參考:
          RequireJS 、 CommonJS 以及 王保平(淘寶)的 SeaJS 及其博客 。
          七、JS最佳實(shí)踐:
          1. 最小化 js 文件,利用壓縮工具將其最小化,同時(shí)開啟http gzip壓縮。工具:
          2. 盡量不要放在 <head> 中,盡量放在頁面底部,最好是</body>之前的位置
          3. 避免使用 document.write 方法
          4. 異步加載 js ,使用非阻塞方式,就是此文內(nèi)容。
          5. 盡量不直接在頁面元素上使用 Inline Javascript,如onClick 。有利于統(tǒng)一維護(hù)和緩存處理。

          posted @ 2012-08-01 21:50 張慧 閱讀(9040) | 評(píng)論 (0)編輯 收藏

          使用谷歌jquery庫文件的理由
          近前端開發(fā)看到,那些引用jquery的文件那些網(wǎng)站,好多是使用谷歌的庫;像這樣的<script type=”text/javascript”src=”http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js“></script>(最近發(fā)展到1.7.1版本的,好神速吶,前兩天還看到一哥們用的1.2.6感慨啊。。。。)
          像上面這樣加載jquery通過谷歌的CDN-Content Delivery Network(內(nèi)容分發(fā)網(wǎng)絡(luò))來讓你的網(wǎng)站加載jquery庫文件。有的同學(xué)可能會(huì)問了,為什么要加載谷歌的jquery庫文件呢?(PS:我們一般不 都是加載自己服務(wù)器上的jquery庫文件的嗎?)。呵呵~~之前也和大家一樣想的,也一直都是加載自己的服務(wù)器上的jquery文件。
          下面我來和大家說說,使用谷歌加載jquery庫文件的好處。
          1,增加網(wǎng)頁的同時(shí)載入速度
          為了避免服務(wù)的過載,瀏覽器限制了同時(shí)連接的數(shù)目,依據(jù)不同的瀏覽器,這個(gè)限制可能是每個(gè)機(jī)房僅僅兩個(gè)之少。
          使用谷歌的AJAX內(nèi)容服務(wù)網(wǎng)絡(luò)來響應(yīng)你的網(wǎng)站,使你本地服務(wù)器上更多服務(wù)可以同時(shí)進(jìn)行。
          2,減少等待時(shí)間
          大家應(yīng)該也差不多,在感慨jquery的強(qiáng)大,也在感慨jquery的團(tuán)隊(duì)也是如此之強(qiáng)大,呵呵~現(xiàn)在最新的jquery已經(jīng)出到1.7.1版本了呢,但是讓人很不爽的是即使是mini壓縮過后的代碼都有83.2KB。但是不知道大家有沒有去官方首頁看過。
          CDN-Content Delivery Network(內(nèi)容分發(fā)網(wǎng)絡(luò))的縮寫,通過各種各樣的服務(wù)途徑把你的一些靜態(tài)內(nèi)容分散開來,當(dāng)用戶的瀏覽器提交這些文件的鏈接請求,他們便會(huì)自動(dòng)下載網(wǎng)絡(luò)上最近的可用的文件。
          因?yàn)檫@個(gè)原因:任何使用你的服務(wù)的用戶從谷歌下載JQuery庫都將獲得比從你自己的服務(wù)器上下載更快的速度。其實(shí)有很多的CDN服務(wù)可與谷歌的相比擬,但是他們很難超越谷歌的免費(fèi)服務(wù)的優(yōu)勢,這個(gè)益處足以決定問題,但這僅僅是一部分。
          3,更好的緩存
          利用谷歌AJAX圖書館內(nèi)容發(fā)布服務(wù)的最大好處是你的用戶根本不需要下載jQuery. 不論你的緩存多么強(qiáng)大,如果你用自己的服務(wù)器提供jQuery,那么你的用戶至少要下載一次它,某個(gè)用戶很有可能在他們?yōu)g覽器的緩存區(qū)里下載了許多完全相 同的jQuery.min.js的拷貝版本,但是當(dāng)他們第一次訪問你的網(wǎng)站的時(shí)候,這些拷貝版本會(huì)被忽略。
          另一方面,當(dāng)瀏覽器檢測到同樣版本的指向谷歌的鏈接,它就會(huì)知道這是下載同一個(gè)文件,不僅是谷歌的服務(wù)器會(huì)返回一個(gè)304(不需要修改文件的指令,即服務(wù)器上的文件未改動(dòng)過)來回復(fù)一個(gè)重復(fù)的請求,而且會(huì)命令瀏覽器的緩存該文件長達(dá)一年的時(shí)間。http://www.jqueryba.com/14.html
          這意味著即使一些人訪問了數(shù)百的使用谷歌服務(wù)的jQuery網(wǎng)站,他們只需要下載一次就夠了。
          不過好像最近天朝對谷歌的東西有點(diǎn)反感呀,就像以前谷歌生氣出走香港一樣,有的時(shí)候谷歌的東西會(huì)打不開,那么會(huì)不會(huì)有一天使用這種方式加載jquery庫文件也會(huì)失敗呢?呵呵~~萬事皆有可能,呵呵~不要緊,此處有一個(gè)萬全的方法:
           <script type=text/javascript src=”http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js”></script>
          <script>!window.jQuery && document.write(‘<script src=”jquery-1.7.1.min.js”><\/script >’);</script>
          將上面的代碼放到你的html代碼的頭部。意義是這樣的:首先去加載谷歌的jquery庫文件,如果沒有加載成功的話,那么就只好加載自己服務(wù)器上的jquery庫文件咯。
          posted @ 2012-08-01 21:43 張慧 閱讀(1160) | 評(píng)論 (1)編輯 收藏

          僅列出標(biāo)題
          共5頁: 1 2 3 4 5 下一頁 
          主站蜘蛛池模板: 呼伦贝尔市| 亳州市| 彭泽县| 昔阳县| 金秀| 南部县| 双鸭山市| 东乡族自治县| 峡江县| 略阳县| 洛隆县| 拜泉县| 建平县| 合江县| 龙山县| 石台县| 丽水市| 浙江省| 黑龙江省| 余姚市| 阜康市| 镇安县| 清丰县| 江山市| 交口县| 会东县| 江油市| 彰武县| 玛曲县| 三门县| 黄陵县| 迁西县| 安福县| 平江县| 晋城| 无为县| 淮南市| 上思县| 化州市| 普定县| 墨竹工卡县|