少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(22)

          我參與的團隊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          #

          1、冒泡排序:
          冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在后面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放后。然后比較第2個數和第3個數,將小數放前,大數放后,如此繼續,直至比較最后兩個數,將小數放前,大數放后。至此第一趟結束,將最大的數放到了最后。在第二趟:仍從第一對數開始比較(因為可能由于第2個數和第3個數的交換,使得第1個數不再小于第2個數),將小數放前,大數放后,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重復以上過程,直至最終完成排序。

          具體代碼例一:

          package com.abin.lee.algorithm.bubble;

          public class BubbleSort {
           public static void main(String[] args) {
            int[] start={5,2,1,3,6,4};
            int[] end=sort(start);
            for(int i=0;i<end.length;i++){
             System.out.println("end["+i+"]="+end[i]);
            }
           }
           
           public static int[] sort(int[] input){
            int temp=0;

            //最多做n-1趟排序
            for(int i=0;i<input.length-1;i++){
              //對當前無序區間score[0......length-i-1]進行排序(j的范圍很關鍵,這個范圍是在逐步縮小的)
             for(int j=0;j<input.length-i-1;j++){
              //把大的值交換到后面
              if(input[j]>input[j+1]){
               temp=input[j];
               input[j]=input[j+1];
               input[j+1]=temp;
              }
              StringBuffer stb=new StringBuffer();
              for(int k=0;k<input.length;k++){
               stb.append("input["+k+"]="+input[k]+" ");
              }
              System.out.println("i="+i+",j="+j+" = "+stb.toString());
             }
            }
            return input;
           }

           

          }


          2、選擇排序:
          選擇排序(Straight Select Sorting) 也是一種簡單的排序方法,它的基本思想是:第一次從R[0]~R[n-1]中選取最小值,與R[0]交換,第二次從R{1}~R[n-1]中選取最小值,與R[1]交換,....,   第i次從R[i-1]~R[n-1]中選取最小值,與R[i-1]交換,.....,第n-1次從R[n-2]~R[n-1]中選取最小值,與R[n-2]交換,總共通過n-1次,得到一個按排序碼從小到大排列的有序序列.
          具體代碼:

          package com.abin.lee.algorithm.select;

          public class SelectSort {
           public static void main(String[] args) {
            int[] start={5,2,3,1,6,4};
            start=sort(start);
            for(int i=0;i<start.length;i++){
             System.out.println("start["+i+"]="+start[i]);
            }
           }
           public static int[] sort(int[] input){
            int temp=0;
            for(int i=0;i<input.length;i++){
             for(int j=i+1;j<input.length;j++){
              if(input[i]>input[j]){
               temp=input[i];
               input[i]=input[j];
               input[j]=temp;
              }
              StringBuffer stb=new StringBuffer();
              for(int k=0;k<input.length;k++){
               stb.append("input["+k+"]="+input[k]+" ");
              }
              System.out.println("i="+i+",j="+j+" = "+stb.toString());
             }
            }
            return input;
           }
          }




          3、請輸入一個數字,比如4,輸出為:
          1
          2 3
          4 5 6
          7 8 9 10

          代碼如下:

          package com.abin.lee.photo;

          public class TestInputNumber {
           public static void main(String[] args) {
            int n=4;
            output(n);
           }
           public static void output(int n){
            int temp=1;
            for(int i=1;i<=n;i++){
             for(int j=0;j<i;j++){
              System.out.print(temp+" ");
              temp++;
             }
             System.out.println("");
            }
            
           }
          }


          4.二叉樹算法

          package com.abin.lee.algorithm.binary;

          public class BinaryNode {
           public int data;//根節點
           BinaryNode left;//左節點
           BinaryNode right;//右節點
           
           public BinaryNode(int data,BinaryNode left,BinaryNode right) {
            this.data=data;
            this.left=left;
            this.right=right;
           }
           
           public int getData() {
            return data;
           }
           public void setData(int data) {
            this.data = data;
           }
           public BinaryNode getLeft() {
            return left;
           }
           public void setLeft(BinaryNode left) {
            this.left = left;
           }
           public BinaryNode getRight() {
            return right;
           }
           public void setRight(BinaryNode right) {
            this.right = right;
           }
          }




          package com.abin.lee.algorithm.binary;

          public class BinaryTree {
           //前序遍歷
           public static void preOrder(BinaryNode root){
            if(null!=root){
             System.out.print(root.data+"-");
             preOrder(root.left);
             preOrder(root.right);
            }
           }
           //中序遍歷
           public static void inOrder(BinaryNode root){
            if(null!=root){
             inOrder(root.left);
             System.out.print(root.data+"--");
             inOrder(root.right);
            }
           }
           //后序遍歷
           public static void postOrder(BinaryNode root){
            if(null!=root){
             postOrder(root.left);
             postOrder(root.right);
             System.out.print(root.data+"---");
            }
           }
           
           public static void main(String[] args) {
            BinaryNode one=new BinaryNode(1,null,null);
            BinaryNode three=new BinaryNode(3,null,null);
            BinaryNode two=new BinaryNode(2,three,one);
            BinaryNode four=new BinaryNode(4,one,two);
            BinaryNode five=new BinaryNode(5,four,one);
            System.out.println("preOrder");
            preOrder(five);
            System.out.println();
            System.out.println("inOrder");
            inOrder(five);
            System.out.println();
            System.out.println("postOrder");
            postOrder(five);
            System.out.println();
            
           }

          }


          輸出結果:
          preOrder
          5-4-1-2-3-1-1-
          inOrder
          1--4--3--2--1--5--1--
          postOrder
          1---3---1---2---4---1---5---




          5、java插入排序

          插入式排序法——插入排序法

          插入排序(Insertion Sortion)的基本思想是:把n個待排序的元素看成一個有序表和一個無序表,開始有序表只包含一個元素,無序表中包含n-1個元素,排序過程中每次從無序表中取出第一個元素,把它的排序碼依次與有序表元素的排序碼進行比較,將它插入到有序表中的適當位置,使之成為新的有序表。


          public class InjectionSort  //定義一個 InjectionSort 類
          public static void injectionSort(int[] number) //傳數組
          for(int j = 1;j<number.length;j++)//循環
          int tmp = number[j]; //循環把數組第二個值放到tmp里
          int i = j-1//給i 賦值
          while(tmp<number[i]) //tmp值和數組第一個值比較誰小
          number[i+1] = number[i]; //如果小于就把第一個值賦值給第二個
          i--;
          if(i == -1)//如果i值=-1
          break; //退出循環
          number[i+1] = tmp //因為比較數組里的前一個比后一個這樣就換交了實現了把小的放在前面
          這是第一次,因為循環是一個數組,后邊的就一次往下循環,最后就把數組里的順序從小到大排序了
          public static void main(String[] args){
          int[] num = {5,46,26,67,2,35};//定義數組num
          injectionSort(num);//調用方法
          for(int i = 0;i<num.length;i++){
          System.out.println(num[i]);//顯示排序后的數組,一行顯示一個值

          簡單說就是數組里第二個和第一個比誰小,把小的放到第一個里,大的放到第二個里,然后第二個再和第三個比,小的還是放在前,一直比到這個數組結束,這樣就實現了從小到大,希望我說的夠詳細


          插入排序代碼while循環:
          package com.abin.lee.algorithm.insert;
          public class InsertSort {
          public static void main(String[] args) {
          int[] input = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
          input=sort(input);
          for (int i = 0; i < input.length; i++) {
          System.out.print(input[i] + "  ");
          }
          }
          public static int[] sort(int[] input) {
          for (int i = 1; i < input.length; i++) {
          int insertVal = input[i];
          // insertValue準備和前一個數比較
          int index = i - 1;
          while (index >= 0 && insertVal < input[index]) {
          // 將把input[index]向后移動
          input[index + 1] = input[index];
          // 讓index向前移動一位
          index--;
          }
          // 將insertValue插入到適當位置
          input[index + 1] = insertVal;
          //下面這個循環是為了打印一下中間的循環看看是不是插入排序的正確算法
          StringBuffer stb=new StringBuffer();
          for(int k=0;k<input.length;k++){
          stb.append(input[k]+" ");
          }
          System.out.println("i="+i+" = "+stb.toString());
          }
          return input;
          }
          }


          插入排序for循環代碼:

          package com.abin.lee.algorithm.insert;
          public class DoInsertSort {
          public static void main(String[] args) {
          int[] input={5,4,6,3,7,2,8,1,0,9};
          input=sort(input);
          for(int i=0;i<input.length;i++){
          System.out.print("input["+i+"]="+input[i]+" ");
          }
          }
          public static int[] sort(int[] input){
          for(int i=1;i<input.length;i++){
          int temp=input[i];
          int j;
          for(j=i;j>0;j--){
          if(temp<input[j-1]){
          input[j]=input[j-1];
          }else{
          break;
          }
          }
          input[j]=temp;
          //下面這個循環是為了打印一下中間的循環看看是不是插入排序的正確算法
          StringBuffer stb=new StringBuffer();
          for(int k=0;k<input.length;k++){
          stb.append(input[k]+" ");
          }
          System.out.println("i="+i+" = "+stb.toString());
          }
          return input;
          }
          }


           

          二分查找又稱折半查找,它是一種效率較高的查找方法。

          折半查找的算法思想是將數列按有序化(遞增或遞減)排列,查找過程中采用跳躍式方式查找,即先以有序數列的中點位置為比較對象,如果要找的元素值小于該中點元素,則將待查序列縮小為左半部分,否則為右半部分。通過一次比較,將查找區間縮小一半。 折半查找是一種高效的查找方法。它可以明顯減少比較次數,提高查找效率。但是,折半查找的先決條件是查找表中的數據元素必須有序。

          package com.abin.algorithm.template.half;

          public class BinarySearch {
          public static void main(String[] args) {
          int[] src=new int[]{1,3,5,7,9,11};
          int result=binarySearch(src, 3);
          System.out.println("result="+result);
          int status=binarySearch(src, 9 ,0 ,src.length);
          System.out.println("status="+status);
          }
          //循環實現
          public static int binarySearch(int[] src,int key){
          int low=0;
          int high=src.length-1;
          while(low<=high){
          int middle=(low+high)/2;
          if(key==src[middle]){
          return middle;
          }else if(key<src[middle]){
          high=middle-1;
          }else{
          low=middle+1;
          }
          }
          return -1;
          }
          //遞歸實現
          public static int binarySearch(int[] src,int key,int low,int high){
          int middle=(low+high)/2;
          if(src[middle]==key){
          return middle;
          }else if(low>=high){
          return -1;
          }else if(src[middle]>key){
          return binarySearch(src, key, low, middle-1);
          }else if(src[middle]<key){
          return binarySearch(src, key, middle+1, high);
          }
          return -1;
          }

          }


          posted @ 2013-09-05 16:27 abin 閱讀(585) | 評論 (0)編輯 收藏

          <style type="text/css">
          div.remark
          {
          white-space:nowrap; 
          width:6em; 
          overflow:hidden;
          text-overflow:ellipsis;
              }
          </style>
          <div class="remark">${refundApply.remarks }</div> 
          posted @ 2013-09-04 16:14 abin 閱讀(1228) | 評論 (4)編輯 收藏

          repcached實現memcached的復制功能:
          repcached是日本人開發的實現memcached復制功能,它是一個單 master單 slave的方案,但它的 master/slave都是可讀寫的,而且可以相互同步,如果 master壞掉, slave偵測到連接斷了,它會自動 listen而成為 master;而如果 slave壞掉, master也會偵測到連接斷,它就會重新 listen等待新的 slave加入
          安裝:
          先安裝memcached(我安裝的1.2.8)
          有兩種方式:
          方式一、下載對應的repcached版本
          #wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz
          #tar zxf memcached-1.2.8-repcached-2.2.tar.gz
          #cd memcached-1.2.8-repcached-2.2
          方式二、下載對應patch版本
          #wget http://downloads.sourceforge.net/repcached/repcached-2.2-1.2.8.patch.gz
          #gzip -cd ../repcached-2.2-1.2.8.patch.gz | patch -p1
          #./configure --enable-replication
          # make
          # make install
          啟動:
          啟動master
          #memcached -v -l 192.168.50.240 -p 11211 -uroot
          replication: listen (master監聽)
          啟動salve
          #memcached -v -l 192.168.50.241 -p 11213 -uroot -x 127.0.0.1 -X 11212
          replication: connect (peer=192.168.50.240:11212)
          replication: marugoto copying
          replication: start
          啟動正常后,masteraccept測試:
          操作master
          #telnet 192.168.50.240 11211
          #set key1 0 0 3
          111
          查看slave
          #telnet 192.168.50.241 11213
          #get key1
          如果正常表示,配置成功
          應用:
          可以實現cache冗余
          注意:如果master down機,slave接管并成為master,這時down機的master只能啟用slave,他們之間互換角色,才能保持復制功能。換句話說,master沒有搶占功能。
          posted @ 2013-08-24 17:15 abin 閱讀(729) | 評論 (0)編輯 收藏

          一、Memcache內存分配機制

                  關于這個機制網上有很多解釋的,我個人的總結如下。

          1. Page為內存分配的最小單位。

            Memcached的內存分配以page為單位,默認情況下一個page是1M,可以通過-I參數在啟動時指定。如果需要申請內存時,memcached會劃分出一個新的page并分配給需要的slab區

          2.  

          3.  

          4. 域。page一旦被分配在重啟前不會被回收或者重新分配(page ressign已經從1.2.8版移除了) 

          5. Slabs劃分數據空間。

            Memcached并不是將所有大小的數據都放在一起的,而是預先將數據空間劃分為一系列slabs,每個slab只負責一定范圍內的數據存儲。如下圖,每個slab只存儲大于其上一個slab的size并小于或者等于自己最大size的數據。例如:slab 3只存儲大小介于137 到 224 bytes的數據。如果一個數據大小為230byte將被分配到slab 4中。從下圖可以看出,每個slab負責的空間其實是不等的,memcached默認情況下下一個slab的最大值為前一個的1.25倍,這個可以通過修改-f參數來修改增長比例。 

          6.   

          7. Chunk才是存放緩存數據的單位。

            Chunk是一系列固定的內存空間,這個大小就是管理它的slab的最大存放大小。例如:slab 1的所有chunk都是104byte,而slab 4的所有chunk都是280byte。chunk是memcached實際存放緩存數據的地方,因為chunk的大小固定為slab能夠存放的最大值,所以所有分配給當前slab的數據都可以被chunk存下。如果時間的數據大小小于chunk的大小,空余的空間將會被閑置,這個是為了防止內存碎片而設計的。例如下圖,chunk size是224byte,而存儲的數據只有200byte,剩下的24byte將被閑置。 

          8.  


          9.  

          10. Slab的內存分配。

            Memcached在啟動時通過-m指定最大使用內存,但是這個不會一啟動就占用,是隨著需要逐步分配給各slab的。
                     如果一個新的緩存數據要被存放,memcached首先選擇一個合適的slab,然后查看該slab是否還有空閑的chunk,如果有則直接存放進去;如果沒有則要進行申請。slab申請內存時以page為單位,所以在放入第一個數據,無論大小為多少,都會有1M大小的page被分配給該slab。申請到page后,slab會將這個page的內存按chunk的大小進行切分,這樣就變成了一個chunk的數組,在從這個chunk數組中選擇一個用于存儲數據。如下圖,slab 1和slab 2都分配了一個page,并按各自的大小切分成chunk數組。 

          11.  


          12.  

          13. Memcached內存分配策略。

            綜合上面的介紹,memcached的內存分配策略就是:按slab需求分配page,各slab按需使用chunk存儲。
            這里有幾個特點要注意,

            1. Memcached分配出去的page不會被回收或者重新分配
            2. Memcached申請的內存不會被釋放
            3. slab空閑的chunk不會借給任何其他slab使用
               每一個slab=1M   切分的chunk個數=1M/最小的chunk大小
              下一個chunk=上一個chunk大小*增長因子


           

                知道了這些以后,就可以理解為什么總內存沒有被全部占用的情況下,memcached卻出現了丟失緩存數據的問題了。
          *******************
          當存儲的值item大于1M的時候:

          按照官方解釋,當大于1M時,按現有的 slab allocation內存分配管理機制,memcache的存取效率會下降很多,就失去了使用memcache的意義,之所以用memcache,一大原因就是它比數據庫速度快,如果失去了速度優勢,就沒意思了。
           支持大于1M的方法 官方也給出了:一個是還是使用slab allocation 機制修改源代碼中 POWER_BLOCK  的值,然后重新編譯。另一個方法是使用低效的 malloc/free 分配機制。 
           如果某個常用slab滿了  而且又沒開啟LRU,會出現命中低的情況·

           1M/最小的chunk=存儲的個數
          然后第二個chunk=第一個chunk*1.25
          這樣1M被不斷的分
          切到最后1M只能存一個chunk

            1M 用完會申請一個新的 1M

          但是 不能超過你的最大內存數
          超過了 就開始回收
          也就是LRU
           當memcache每次在get的時候會檢測key所對應的value過期時間  那么當檢測到此item過期了 value會被清除  key呢 保留 還是也會被清除 ?
          不會被清除,只會返回空
          直到lru覆蓋這個過期值
          那就是當我程序棄用了大量的key時  cmd_get時 這些key 還會被掃描到?
          不會
          只是還存在內存里  占著內存
          posted @ 2013-08-23 17:06 abin 閱讀(894) | 評論 (0)編輯 收藏

          有些符號在URL中是不能直接傳遞的,如果要在URL中傳遞這些特殊符號,那么就要使用他們的編碼了。下表中列出了一些URL特殊符號及編碼

          十六進制值

           

          1 + URL 中+號表示空格 %2B
          2 空格 URL中的空格可以用+號或者編碼 %20
          3 / 分隔目錄和子目錄 %2F
          4 ? 分隔實際的 URL 和參數 %3F
          5 % 指定特殊字符 %25
          6 # 表示書簽 %23
          7 & URL 中指定的參數間的分隔符 %26
          8 = URL 中指定參數的值 %3D

           
            解決的方法:

            replace() 方法如果直接用str.replace("-","!") 只會替換第一個匹配的字符.

            而str.replace(/\-/g,"!")則可以替換掉全部匹配的字符(g為全局標志)。

            replace()

            js中替換字符變量如下:

            data2=data2.replace(/\%/g,"%25");

            data2=data2.replace(/\#/g,"%23");

            data2=data2.replace(/\&/g,"%26");

          posted @ 2013-08-22 20:23 abin 閱讀(551) | 評論 (0)編輯 收藏

          如何用jquery獲取<input id="test" name="test" type="text"/>中輸入的值?
          $("#test").val()
          $("input[name='test']").val()
          $("input[type='text']").val()
          $("input[type='text']").attr("value")
          posted @ 2013-08-22 10:55 abin 閱讀(71521) | 評論 (0)編輯 收藏

          1.struts的toke原理
                Struts本身有一套完善的防止重復提交表單的Token(令牌)機制,但筆者目前的項目自寫的framework沒有用到Struts,故也得自寫防止用戶因為后退或者刷新來重復提交表單內容的Token機制。不難,容易實現。實現原理:一致性。jsp生成表單時,在表單中插入一個隱藏<input>字段,該字段就是保存在頁面端的token字符串,同時把該字符串存入session中。等到用戶提交表單時,會一并提交該隱藏的token字符串。在服務器端,查看下是否在session中含有與該token字符串相等的字符串。如果有,那么表明是第一次提交該表單,然后刪除存放于session端的token字符串,再做正常業務邏輯流程;如果沒有,那么表示該表單被重復提交,做非正常流程處理,可以警告提示也可以什么也不做。
          2.
          posted @ 2013-08-21 13:43 abin 閱讀(1239) | 評論 (2)編輯 收藏

          行級鎖:
          select * from abin1 t where t.id=21 for update;

          表級鎖:
          lock table abin1 IN EXCLUSIVE MODE (nowait);
          posted @ 2013-08-20 22:38 abin 閱讀(620) | 評論 (0)編輯 收藏

          memcached

           Memcached 是一個高性能的分布式內存對象緩存系統,用于動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提供動態、數據庫驅動網站的速度。Memcached基于一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,并通過memcached協議與守護進程通信。但是它并不提供冗余(例如,復制其hashmap條目);當某個服務器S停止運行或崩潰了,所有存放在S上的鍵/值對都將丟失。

          Memcached官方:http://danga.com/memcached/

          關于Memcached的介紹請參考:Memcached深度分析

          下載Windows的Server端

          下載地址:http://code.jellycan.com/memcached/

          windows服務端下載地址:
          http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip
          windows服務端安裝:
          http://www.cnblogs.com/xd502djj/archive/2012/09/25/2701800.html
          http://www.cnblogs.com/wucg/archive/2011/03/01/1968185.html
          ehcache集群的相關文章:
          http://www.cnblogs.com/yangy608/archive/2011/10/07/2200669.html
          http://www.cnblogs.com/hoojo/archive/2012/07/19/2599534.html
          http://www.open-open.com/lib/view/open1345651870876.html

          以圖為例
          Cache A、Cache B,Cache C為三臺Memcached服務器
          根據三臺Memcached的IP和端口,計算出他們的Hash值,然后分布在整個圓環上
          每兩臺Memcached服務器的Hash值之間為一個區間
          Key1、Key2、Key3、Key4
          為要存儲在Memcached里的4個Key
          根據4個Key計算出他們的Hash值,同樣也落在這個圓環上
          在這個環形空間中,如果沿著順時針方向從對象的 key 值出發,直到遇見一個 cache ,那么就將該對象存儲在這個 cache 上,因為對象和 cache 的 hash 值是固定的,因此這個 cache 必然是唯一和確定的。
          根據上面的方法,對象 key1 將被存儲到 cache A 上; key2 和 key3 對應到 cache C ; key4 對應到 cache B;
          同一個key不是三臺服務器上面都有映射, 只會映射到其中一臺服務器上面

          集群中其中一個Memcached節點宕機,會導致存在著上面的Key全部失效而重新對這些key進行hash
          對其他活著的Memcached節點上的key沒有影響

          如果是集群
          Set和Get時觸發操作的是否為同一個配置
          如果是多個應用服務器觸發Set、Get操作,每一個的Memcached節點配置順序是否相同
          可以通過telnet的方式,去Memcached節點上Get一下響應的Key,看是否真的過期

          你分析一下你的slab構成,看看每個slab分配了多少page頁,加起來是不是跟總分配內存一樣,如果是一樣的表示你的內存已經分配完了,每個slab只能使用已分配的大小,不能再增漲。再分析一下存這個value的slab的大小,如果比較小,且hits量很大,就會出現你這樣的情況,剛存沒多久的數據沒到過期就會被擠掉。

          失效就幾種可能:
          1,cache滿了,剛插進去就被lru剔出來
          2,失效時間設置不對,導致數據一插進去就失效(不能超過30天)

           使用了64的操作系統,能分配2GB以上的內存。32位操作系統中,每個進程最多只能使用2GB內存。可以啟動多個分配2GB以下內存的進程,但這樣一臺服務器上的TCP連接數就會成倍增加,管理上也變得復雜,所以盡量統一使用了64位操作系統。
          另外,最好分配內存為3GB,是因為內存分配量超過這個值,就有可能導致內存交換(swap),memcached的內存存儲“slab”, memcached啟動時指定的內存分配量是memcached用于保存數據的量,沒有包括“slab”本身占用的內存、以及為了保存數據而設置的管理空間。因此,memcached進程的實際內存分配量要比指定的容量要大。
          如果在memcached中的數據大部分都比較小。這樣,進程的大小要比指定的容量大很多。因此,改變內存分配量進行驗證,確認了3GB的大小不會引發swap。

           64位操作系統不受限制(小于你的物理內存大小即可),不過得注意Memcache軟件本身是有內存消耗的(相比可以忽略),但這點還是注意一下。
          posted @ 2013-08-09 17:34 abin 閱讀(584) | 評論 (0)編輯 收藏

           <script type="text/javascript" >
            var EventUtil = {
                 addHandler: function (element, type, handler) {
                     if (element.addEventListener) {
                         element.addEventListener(type, handler, false);
                     } else if (element.attachEvent) {
                         element.attachEvent("on" + type, handler);
                     } else {
                         element["on" + type] = handler;
                     }
                 }
             };
             EventUtil.addHandler(document, "DOMContentLoaded", function (event) {
              setTimeout(function(){
               var imgs=document.getElementsByTagName("img");
               for (var i =0; i<=imgs.length;i++){
                var img=imgs[i];
                var height,width;
                height=img.naturalHeight;
                width=img.naturalWidth;
                if((height==0&&width==0)){
                 img.src="";
                 img.parentNode.parentNode.hidden=true;
                 var nid=img.getAttribute('nid');
                 document.getElementById('divNoneImg'+nid).style.display="block";
                }
               }
              }, 2000);
             });

           </script>

          posted @ 2013-07-31 14:33 abin 閱讀(456) | 評論 (0)編輯 收藏

          僅列出標題
          共50頁: First 上一頁 10 11 12 13 14 15 16 17 18 下一頁 Last 
          主站蜘蛛池模板: 海原县| 南和县| 瑞金市| 双江| 安龙县| 吉安县| 张家港市| 博白县| 阜康市| 二连浩特市| 皋兰县| 托里县| 西贡区| 迁安市| 中超| 祁连县| 西和县| 横山县| 会泽县| 江口县| 漳平市| 乌海市| 轮台县| 潢川县| 行唐县| 新宁县| 巴彦淖尔市| 白银市| 岑溪市| 大石桥市| 亚东县| 黑龙江省| 大英县| 葫芦岛市| 吉木乃县| 肥东县| 新郑市| 裕民县| 昌江| 巴里| 湘阴县|