跳到主要內容

發表文章

目前顯示的是 10月, 2012的文章

範例 - JavaScript 等比例縮小圖片

max-width、max-height以及這兩個的 min 版本是偶爾能在某些CSS中看到的屬性設定 不過因為IE不會辨識這些屬性,所以就直接寫JavaScript 調整圖片大小 var img = this.getElementsByTagName("img")[0]; img.onload = function () {     var maxWidth = "300",         maxHeight = "80";     if (img.offsetHeight >= (maxHeight / maxWidth) * img.offsetWidth) {         img.style.width = img.offsetWidth / img.offsetHeight * maxHeight + "px";         img.style.height = maxHeight + "px";     } else {         img.style.height = img.offsetHeight / img.offsetWidth * maxHeight + "px";         img.style.width = maxWidth + "px";     } };

Java 數值轉換函式區別 - 以Integer.parseInt()、Integer.valueOf()為例

之前對於Java在數值轉換中為什麼會提供這兩種功能幾乎一樣的方法感到疑惑 看了原始碼就可以得到解答 public static Integer valueOf(String s) throws NumberFormatException {   return new Integer(parseInt(s, 10)); } public static int parseInt(String s) throws NumberFormatException {   return parseInt(s,10); } 答案在於回傳型別的不同 parseInt()回傳 int 基本型別,valueOf()則回傳Integer型別 除了Integer外,其他的數值型別也有同樣的方法(Double、Float...etc) 在Java1.4版本以前這兩種方法有差異,但在後來版本裡因為有auto boxing機制而沒差了

JavaScript 少用全域變數的理由

在 JavaScript: The Good Parts 書中即有討論到這個議題( 心得文連結 ) 容易造成變數名稱紊亂這點,可以盡量用匿名函式的寫法解決 在匿名函式中使用的變數名稱就不會跟全域變數產生衝突 但除了這個問題外,還有效能的考量 JavaScript搜尋變數的方式是 區域變數 -> 更上層的區域變數 -> .... -> 全域變數 若有常用到的全域變數,把它另存成區域變數對效能有很大的幫助 var data; function displayData(){   //caching variables   var _data = data;   .... } 另一個考量則是JavaScript的GC(Garbage Collection)機制 全域變數只有在離開頁面或重新載入時,才會將全域變數回收 就算指定全域變數為null值,如:data = null; 因為JavaScipt的null也是一種 物件 ,所以這樣做並不會移除參考 而在區塊中(含function)宣告的變數則是區塊範圍結束後就被回收 所以多用區域變數就可以避免記憶體等資源被長時間占用

Excel 開啟產出的 .CSV檔為亂碼的解決方式

CSV檔為以逗號區隔欄位,用來儲存資料的純文字格式 指定了編碼的純文字格式應該是與亂碼無緣 但有時以微軟的Excel開啟.csv檔卻會發現內容為亂碼 發生的原因是微軟內部系統處理格式時會在開頭暗中寫入一串判別的字碼 而微軟系統就以文字檔案中是否含這串暗碼來判定要以UTF-8或ASCII格式讀取檔案 所以我們若要讓我們產出的CSV檔能正確的被Excel讀取,就要在檔案開頭加入暗碼 public CSVWriter(OutputStream out){     this.out=out;     //Corresponding to Microsoft Excel, make file won't open with scrambles in Excel     byte[] BOM_UTF8 = { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF };     try {     out.write(BOM_UTF8);     } catch (IOException e) {     System.err.println("BOM寫入CSV失敗");     }     .... }

Ajax跨網域議題 - 使用JSONP取得資料

參考文章: 【原創】說說JSON和JSONP,也許你會豁然開朗,含jQuery用例                        使用 JSONP 跨站請求 JSON為JavaScript中常用的資料交換格式 簡單、輕型的特性讓他成為Web 開發的首選,這裡就不多提了 而在Web開發的過程中,我們有時會遇到跨網域存取資料的需求 不管是基於分散流量需求,又或者是使用雲端提供業者的服務 使用第三方提供的服務、資源 甚至在同一個專案目錄底下開發的檔案也可能因啟用HTTPS而導致網域的不同 我們有這麼多會碰上跨網域的情況 但Browser 本身的安全機制會禁止我們直接從其他網域取得資料 瀏覽器唯一能從其他網域取得資源的機會就是JavaScript的匯入 也因此衍伸出一個非官方的解決方案,也就是JSONP JSONP的全名是JSON with Padding 這項技巧本身與JSON沒有實際關係,僅僅是因為JSON是實作上最使用的格式

[轉載] POI設置EXCEL單元格格式為文本、小數、百分比、貨幣、日期、科學計數法和中文大寫

轉載來源 以下將要介紹的每一種都會用到這三行中的變量             HSSFWorkbook demoWorkBook = new HSSFWorkbook();               HSSFSheet demoSheet = demoWorkBook.createSheet("The World's 500 Enterprises");               HSSFCell cell = demoSheet.createRow(0).createCell(0); 第一種:日期格式             cell.setCellValue(new Date(2008,5,5));             //set date format             HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();             HSSFDataFormat format= demoWorkBook.createDataFormat();             cellStyle.setDataFormat(format.getFormat("yyyy年m月d日"));             cell.setCellStyle(cellStyle); 第二種:保留兩位小數格式             cell.setCellValue(1.2);             HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();             cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));             cell.setCellStyle(cellStyle); 這裡與上面有所不同,用的是HSSFDataFormat.getBuiltinFormat()方法,之所以用這個,是因為0.00是Excel內嵌的格式 第三種:貨幣格式             cell.setCellValue