奇怪的杯子

          年輕沒有失敗、

           

          2012年1月18日

          Ajax-------IE和FIREFOX 腳本的一些區(qū)別

          轉(zhuǎn):用AJAX開發(fā) 不可避免的要遇到瀏覽器不同,實(shí)現(xiàn)不同的問題,下面是AoiUmi的一些總結(jié)。

          1:innerText
          IE支持,F(xiàn)IREFOX不支持
          解決辦法:用innerHTML,2種瀏覽器都識(shí)別innerHTML

          2:document.createElement
          document.appendChild
          在往表里插入行時(shí)
          FIREFOX支持,IE不支持
          解決辦法:把行插入到TBODY中,不要直接插入到表

          3:setAttribute('style','color:red;')
          FIREFOX支持(除了IE,現(xiàn)在所有瀏覽器都支持),IE不支持
          解決辦法:不用setAttribute('style','color:red')
          而用object.style.cssText = 'color:red;'(這寫法也有例外)
          最好的辦法是上面種方法都用上,萬無一失 ^_^
          4:class
          setAttribute('class','styleClass')
          FIREFOX支持,IE不支持(指定屬性名為CLASS,IE不會(huì)設(shè)置元素的CLASS屬性,相反只使用SETATTRIBUTE時(shí)IE自動(dòng)識(shí)別CLASSNAME屬性)
          解決辦法:
          setAttribute('class','styleClass')
          setAttribute('className','styleClass')
          2種都用上

          5:用setAttribute設(shè)置事件
          var obj = document.getElementById('objId');
          obj.setAttribute('onclick','funcitonname();');
          FIREFOX支持,IE不支持
          解決辦法:
          IE中必須用點(diǎn)記法來引用所需的事件處理程序,并且要用賦予匿名函數(shù)
          如下:
          var obj = document.getElementById('objId');
          obj.onclick=function(){fucntionname();};
          這種方法所有瀏覽器都支持

          6:建立單選鈕
          IE以外的瀏覽器
          var rdo = document.createElement('input');
          rdo.setAttribute('type','radio');
          rdo.setAttribute('name','radiobtn');
          rdo.setAttribute('value','checked');

          IE:
          var rdo =document.createElement("<input type='radio' name='radiobtn' value='checked'>");
          解決辦法:
          這一點(diǎn)區(qū)別和前面的都不一樣。這次完全不同,所以找不到共同的辦法來解決,那么只有IF-ELSE了
          萬幸的是,IE可以識(shí)別出document的uniqueID屬性,別的瀏覽器都不可以識(shí)別出這一屬性。問題解決。

          0:共同的一些技巧
          在動(dòng)態(tài)建立INPUT型輸入元素時(shí),一般是先加入,在設(shè)置TYPE。這就有可能出錯(cuò)

          好習(xí)慣:var btn = document.createElement('input');
          btn.setAttribut('type','button');
          document.getElementById('formId').appendChild(btn);

          posted @ 2012-01-18 09:53 奇怪的杯子 閱讀(162) | 評(píng)論 (0)編輯 收藏

          四種操作xml的方式: SAX, DOM, JDOM , DOM4J的比較

          1. 介紹

          1)DOM(JAXP Crimson解析器)
                  DOM是用與平臺(tái)和語言無關(guān)的方式表示XML文檔的官方W3C標(biāo)準(zhǔn)。DOM是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)或信息片斷的集合。這個(gè)層次結(jié)構(gòu)允許開發(fā)人員在樹中尋找特定信息。分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造層次結(jié)構(gòu),然后才能做任何工作。由于它是基于信息層次的,因而DOM被認(rèn)為是基于樹或基于對(duì)象的。DOM以及廣義的基于樹的處理具有幾個(gè)優(yōu)點(diǎn)。首先,由于樹在內(nèi)存中是持久的,因此可以修改它以便應(yīng)用程序能對(duì)數(shù)據(jù)和結(jié)構(gòu)作出更改。它還可以在任何時(shí)候在樹中上下導(dǎo)航,而不是像SAX那樣是一次性的處理。DOM使用起來也要簡(jiǎn)單得多。

          2)SAX

                  SAX處理的優(yōu)點(diǎn)非常類似于流媒體的優(yōu)點(diǎn)。分析能夠立即開始,而不是等待所有的數(shù)據(jù)被處理。而且,由于應(yīng)用程序只是在讀取數(shù)據(jù)時(shí)檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲(chǔ)在內(nèi)存中。這對(duì)于大型文檔來說是個(gè)巨大的優(yōu)點(diǎn)。事實(shí)上,應(yīng)用程序甚至不必解析整個(gè)文檔;它可以在某個(gè)條件得到滿足時(shí)停止解析。一般來說,SAX還比它的替代者DOM快許多。
             選擇DOM還是選擇SAX? 對(duì)于需要自己編寫代碼來處理XML文檔的開發(fā)人員來說,  選擇DOM還是SAX解析模型是一個(gè)非常重要的設(shè)計(jì)決策。 DOM采用建立樹形結(jié)構(gòu)的方式訪問XML文檔,而SAX采用的事件模型。

            DOM解析器把XML文檔轉(zhuǎn)化為一個(gè)包含其內(nèi)容的樹,并可以對(duì)樹進(jìn)行遍歷。用DOM解析模型的優(yōu)點(diǎn)是編程容易,開發(fā)人員只需要調(diào)用建樹的指令,然后利用navigation APIs訪問所需的樹節(jié)點(diǎn)來完成任務(wù)。可以很容易的添加和修改樹中的元素。然而由于使用DOM解析器的時(shí)候需要處理整個(gè)XML文檔,所以對(duì)性能和內(nèi)存的要求比較高,尤其是遇到很大的XML文件的時(shí)候。由于它的遍歷能力,DOM解析器常用于XML文檔需要頻繁的改變的服務(wù)中。

            SAX解析器采用了基于事件的模型,它在解析XML文檔的時(shí)候可以觸發(fā)一系列的事件,當(dāng)發(fā)現(xiàn)給定的tag的時(shí)候,它可以激活一個(gè)回調(diào)方法,告訴該方法制定的標(biāo)簽已經(jīng)找到。SAX對(duì)內(nèi)存的要求通常會(huì)比較低,因?yàn)樗岄_發(fā)人員自己來決定所要處理的tag。特別是當(dāng)開發(fā)人員只需要處理文檔中所包含的部分?jǐn)?shù)據(jù)時(shí),SAX這種擴(kuò)展能力得到了更好的體現(xiàn)。但用SAX解析器的時(shí)候編碼工作會(huì)比較困難,而且很難同時(shí)訪問同一個(gè)文檔中的多處不同數(shù)據(jù)。

          3)JDOM           http://www.jdom.org/

                    JDOM的目的是成為Java特定文檔模型,它簡(jiǎn)化與XML的交互并且比使用DOM實(shí)現(xiàn)更快。由于是第一個(gè)Java特定模型,JDOM一直得到大力推廣和促進(jìn)。正在考慮通過“Java規(guī)范請(qǐng)求JSR-102”將它最終用作“Java標(biāo)準(zhǔn)擴(kuò)展”。從2000年初就已經(jīng)開始了JDOM開發(fā)。

            JDOM與DOM主要有兩方面不同。首先,JDOM僅使用具體類而不使用接口。這在某些方面簡(jiǎn)化了API,但是也限制了靈活性。第二,API大量使用了Collections類,簡(jiǎn)化了那些已經(jīng)熟悉這些類的Java開發(fā)者的使用。

            JDOM文檔聲明其目的是“使用20%(或更少)的精力解決80%(或更多)Java/XML問題”(根據(jù)學(xué)習(xí)曲線假定為20%)。JDOM對(duì)于大多數(shù)Java/XML應(yīng)用程序來說當(dāng)然是有用的,并且大多數(shù)開發(fā)者發(fā)現(xiàn)API比DOM容易理解得多。JDOM還包括對(duì)程序行為的相當(dāng)廣泛檢查以防止用戶做任何在XML中無意義的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情況下的錯(cuò)誤)。這也許是比學(xué)習(xí)DOM或JDOM接口都更有意義的工作。

            JDOM自身不包含解析器。它通常使用SAX2解析器來解析和驗(yàn)證輸入XML文檔(盡管它還可以將以前構(gòu)造的DOM表示作為輸入)。它包含一些轉(zhuǎn)換器以將JDOM表示輸出成SAX2事件流、DOM模型或XML文本文檔。JDOM是在Apache許可證變體下發(fā)布的開放源碼。

          4)DOM4J http://dom4j.sourceforge.net/ 
                      
                  雖然DOM4J代表了完全獨(dú)立的開發(fā)結(jié)果,但最初,它是JDOM的一種智能分支。它合并了許多超出基本XML文檔表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文檔或流化文檔的基于事件的處理。它還提供了構(gòu)建文檔表示的選項(xiàng),它通過DOM4J API和標(biāo)準(zhǔn)DOM接口具有并行訪問功能。從2000下半年開始,它就一直處于開發(fā)之中。

            為支持所有這些功能,DOM4J使用接口和抽象基本類方法。DOM4J大量使用了API中的Collections類,但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然DOM4J付出了更復(fù)雜的API的代價(jià),但是它提供了比JDOM大得多的靈活性。

            在添加靈活性、XPath集成和對(duì)大文檔處理的目標(biāo)時(shí),DOM4J的目標(biāo)與JDOM是一樣的:針對(duì)Java開發(fā)者的易用性和直觀操作。它還致力于成為比JDOM更完整的解決方案,實(shí)現(xiàn)在本質(zhì)上處理所有Java/XML問題的目標(biāo)。在完成該目標(biāo)時(shí),它比JDOM更少?gòu)?qiáng)調(diào)防止不正確的應(yīng)用程序行為。

            DOM4J是一個(gè)非常非常優(yōu)秀的Java XML API,具有性能優(yōu)異、功能強(qiáng)大和極端易用使用的特點(diǎn),同時(shí)它也是一個(gè)開放源代碼的軟件。如今你可以看到越來越多的Java軟件都在使用DOM4J來讀寫XML,特別值得一提的是連Sun的JAXM也在用DOM4J。

          2.. 比較

          1)DOM4J性能最好,連Sun的JAXM也在用DOM4J。目前許多開源項(xiàng)目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J來讀取XML配置文件。如果不考慮可移植性,那就采用DOM4J.

          2)JDOM和DOM在性能測(cè)試時(shí)表現(xiàn)不佳,在測(cè)試10M文檔時(shí)內(nèi)存溢出。在小文檔情況下還值得考慮使用DOM和JDOM。雖然JDOM的開發(fā)者已經(jīng)說明他們期望在正式發(fā)行版前專注性能問題,但是從性能觀點(diǎn)來看,它確實(shí)沒有值得推薦之處。另外,DOM仍是一個(gè)非常好的選擇。DOM實(shí)現(xiàn)廣泛應(yīng)用于多種編程語言。它還是許多其它與XML相關(guān)的標(biāo)準(zhǔn)的基礎(chǔ),因?yàn)樗将@得W3C推薦(與基于非標(biāo)準(zhǔn)的Java模型相對(duì)),所以在某些類型的項(xiàng)目中可能也需要它(如在JavaScript中使用DOM)。

          3)SAX表現(xiàn)較好,這要依賴于它特定的解析方式-事件驅(qū)動(dòng)。一個(gè)SAX檢測(cè)即將到來的XML流,但并沒有載入到內(nèi)存(當(dāng)然當(dāng)XML流被讀入時(shí),會(huì)有部分文檔暫時(shí)隱藏在內(nèi)存中)。

          3. 四種xml操作方式的基本使用方法

          xml文件:

          <?xml version="1.0" encoding="utf-8" ?>
          <Result>
             <VALUE>
                 <NO DATE="2005">A1</NO>
                 <ADDR>GZ</ADDR>
             </VALUE>
             <VALUE>
                 <NO DATE="2004">A2</NO>
                 <ADDR>XG</ADDR>
            </VALUE>
          </Result>

          1)DOM

          import java.io.*;
          import java.util.*;
          import org.w3c.dom.*;
          import javax.xml.parsers.*;

          public class MyXMLReader{
           public static void main(String arge[]){

            long lasting =System.currentTimeMillis();
            try{ 
             File f=new File("data_10k.xml");
             DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
             DocumentBuilder builder=factory.newDocumentBuilder();
             Document doc = builder.parse(f);
             NodeList nl = doc.getElementsByTagName("VALUE");
             for (int i=0;i<nl.getLength();i++){
              System.out.print("車牌號(hào)碼:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
              System.out.println("車主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
             }
            }catch(Exception e){
             e.printStackTrace();
          }

          2)SAX

          import org.xml.sax.*;
          import org.xml.sax.helpers.*;
          import javax.xml.parsers.*;

          public class MyXMLReader extends DefaultHandler {

           java.util.Stack tags = new java.util.Stack();
           public MyXMLReader() {
            super();
             }

           public static void main(String args[]) {
            long lasting = System.currentTimeMillis();
            try {
             SAXParserFactory sf = SAXParserFactory.newInstance();
             SAXParser sp = sf.newSAXParser();
             MyXMLReader reader = new MyXMLReader();
             sp.parse(new InputSource("data_10k.xml"), reader);
            } catch (Exception e) {
             e.printStackTrace();
            }

            System.out.println("運(yùn)行時(shí)間:" + (System.currentTimeMillis() - lasting) + "毫秒");}
            public void characters(char ch[], int start, int length) throws SAXException {
            String tag = (String) tags.peek();
            if (tag.equals("NO")) { 
             System.out.print("車牌號(hào)碼:" + new String(ch, start, length));
              }
              if (tag.equals("ADDR")) {
            System.out.println("地址:" + new String(ch, start, length));
              }
             }

            public void startElement(String uri,String localName,String qName,Attributes attrs) {
            tags.push(qName);}

          3) JDOM

          import java.io.*;
          import java.util.*;
          import org.jdom.*;
          import org.jdom.input.*;

          public class MyXMLReader {

           public static void main(String arge[]) {
            long lasting = System.currentTimeMillis();
            try {
             SAXBuilder builder = new SAXBuilder(); 
             Document doc = builder.build(new File("data_10k.xml")); 
             Element foo = doc.getRootElement(); 
             List allChildren = foo.getChildren(); 
             for(int i=0;i<allChildren.size();i++) { 
              System.out.print("車牌號(hào)碼:" + ((Element)allChildren.get(i)).getChild("NO").getText());
              System.out.println("車主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());
             }
            } catch (Exception e) {
             e.printStackTrace();
          }

          }

          4)DOM4J

          import java.io.*;
          import java.util.*;
          import org.dom4j.*;
          import org.dom4j.io.*;

          public class MyXMLReader {

           public static void main(String arge[]) {
            long lasting = System.currentTimeMillis();
            try {
             File f = new File("data_10k.xml");
             SAXReader reader = new SAXReader();
             Document doc = reader.read(f);
             Element root = doc.getRootElement();
             Element foo;
             for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {
              foo = (Element) i.next();
              System.out.print("車牌號(hào)碼:" + foo.elementText("NO"));
              System.out.println("車主地址:" + foo.elementText("ADDR"));
             }
            } catch (Exception e) {
             e.printStackTrace();
              }
          }


          posted @ 2012-01-18 09:51 奇怪的杯子 閱讀(126) | 評(píng)論 (0)編輯 收藏

          DOM元素如何獲得焦點(diǎn)

          首先讓我們看看哪些元素可以直接獲得焦點(diǎn)element..focus()

          // Form : http://www.w3.org/TR/html5/editing.html#focusable

          • a elements that have an href attribute
          • link elements that have an href attribute
          • button elements that are not disabled
          • input elements whose type attribute are not in the Hidden state and that are not disabled
          • select elements that are not disabled
          • textarea elements that are not disabled
          • command elements that do not have a disabled attribute
          • Elements with a draggable attribute set, if that would enable the user agent to allow the user to begin a drag operations for those elements without the use of a pointing device
          • Each shape that is generated for an area element

          而除上面以外的元素(比如:div,p)一般都無法直接獲得焦點(diǎn),那如何處理呢?

          1. 給元素添加 contenteditable 屬性。

            // From : http://www.w3.org/TR/2009/WD-html5-20090423/editing.html#attr-contenteditable

            User agents must make editing hosts focusable (which typically means they enter the tab order).

          2. 給元素添加 tabindex 屬性。

            // From : http://www.w3.org/TR/2009/WD-html5-20090423/editing.html#attr-tabindex

            The tabindex content attribute specifies whether the element is focusable, whether it can be reached using sequential focus navigation, and the relative order of the element for the purposes of sequential focus navigation.

            非常推薦使用tabindex = -1 ,基本無副作用!!

            // From : http://www.w3.org/TR/2009/WD-html5-20090423/editing.html#attr-tabindex

            If the value is a negative integer: The user agent must allow the element to be focused, but should not allow the element to be reached using sequential focus navigation.

          綜述,使無法直接獲得焦點(diǎn)的元素獲得焦點(diǎn)的最佳實(shí)踐就是:給元素添加tabindex = -1

          posted @ 2012-01-18 09:49 奇怪的杯子 閱讀(168) | 評(píng)論 (0)編輯 收藏

          oracle數(shù)據(jù)恢復(fù)

          1.
          表查詢閃回
          create table xcp as (select * from b_za_bzdzkxx);
          select * from xcp;
          select count(1) from xcp;--22001
          select count(1) from xcp t where t.dzbh like '510521%';--7011
          delete from xcp t where t.dzbh like '510521%';
          select count(1) from xcp;--14990
          --查找指定時(shí)間點(diǎn)前的數(shù)據(jù)
          select count(1) from xcp as of timestamp to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss');--
          22001

          select * from xcp for update;--添加一條記錄
          select count(1) from xcp;--14991

          --恢復(fù)指定時(shí)間點(diǎn)的前delete數(shù)據(jù)(將刪除恢復(fù)時(shí)間點(diǎn)后面的數(shù)據(jù))

          alter table xcp enable row movement;--啟動(dòng)的行移動(dòng)功能
          flashback table xcp to timestamp to_timestamp('2011-12-23 10:49:30,'yyyy-MM-dd hh24:mi:ss');
          select count(1) from xcp;--22001

          --恢復(fù)指定時(shí)間點(diǎn)的前delete數(shù)據(jù),并保留恢復(fù)時(shí)間點(diǎn)后面的數(shù)據(jù)

          create table xcp2 as (select * from xcp t where t.createdtime>to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss'));
          select * from xcp2;--臨時(shí)表
          alter table xcp enable row movement;--啟動(dòng)的行移動(dòng)功能
          flashback table xcp to timestamp to_timestamp('2011-12-23 10:49:30,'yyyy-MM-dd hh24:mi:ss');
          select count(1) from xcp;--22001
          insert into xcp select * from xcp2 --將臨時(shí)表的數(shù)據(jù)再插入到源表
          select count(1) from xcp;--22002


          2.刪除
          閃回[10g+]
              刪除閃回為刪除oracle 10G提供了一個(gè)數(shù)據(jù)庫(kù)安全機(jī)制,當(dāng)用戶刪除一個(gè)表時(shí),oracle 10G會(huì)將該表放到回收站中,回收站中的對(duì)象一直會(huì)保留,直到用戶決定永久刪除它們或出現(xiàn)表空間的空間不足時(shí)才會(huì)被刪除。回收站是一個(gè)虛擬容器,用于存儲(chǔ)所有被刪除的對(duì)象。數(shù)據(jù)字典user_tables中的列dropped表示被刪除的表,查詢方法如下:
          select table_name,dropped from user_tables;
          --設(shè)置數(shù)據(jù)庫(kù)是否啟用回收站
          alert session set recyclebin = off;
          --查詢回收站對(duì)象
          select * from recyclebin;
          select * from user_recyclebin;
          select * from dba_recyclebin;


          drop table xcp;
          select count(1) from xcp;--0
          --恢復(fù)drop的表
          flashback table xcp to before drop;
          select count(1) from xcp;--22001

          如果不知道原表名,可以直接使用回收站中的名稱進(jìn)行閃回..
          flashback table "BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop;
          在回收的同時(shí)可以修改表名
          flashback table "
          BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop rename to xcp1;

          --真正刪除一個(gè)表,而不進(jìn)入回收站,可以在刪除表時(shí)增加purge選項(xiàng)
          drop table xcp1 purge;
          --也可以從回收站永久性刪除表
          purge table xcp1;
          --刪除當(dāng)前用戶回收站
          purge recyclebin
          --刪除全體用戶在回收站的資源
          purge dba_resyclebin



          3.數(shù)據(jù)庫(kù)閃口
          [10g+]
              使用數(shù)據(jù)庫(kù)閃回功能,可以使數(shù)據(jù)庫(kù)回到過去某一狀態(tài),語法如下:
                  sql: alter database flashback on;
                  sql: flashback database to scn 46963;
                  sql: flashback database to timestamp to_timestamp('2007-2-12 12:00:00','yyyy-MM-dd hh24:mi:ss');


          posted @ 2012-01-18 09:40 奇怪的杯子 閱讀(127) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題  

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 蕲春县| 遵义市| 广宗县| 敦化市| 额济纳旗| 定日县| 通城县| 夏河县| 马公市| 乌兰察布市| 上虞市| 郎溪县| 郯城县| 青田县| 洪泽县| 依安县| 宝清县| 株洲市| 苍南县| 准格尔旗| 海林市| 孟连| 忻城县| 威海市| 湾仔区| 长沙县| 卢龙县| 登封市| 望都县| 西宁市| 绥化市| 红安县| 中西区| 常山县| 德昌县| 道孚县| 和顺县| 镇江市| 安图县| 顺平县| 天气|