搜尋

隨機推薦

在css中對特定的元素設置樣式離不開選擇符的使用,現在一些大的 javascript 框架 也常用選擇符來獲取特定的元素,如jQuery。W3c規範定義了兩個新的方法(querySelector 和 querySelectorAll) 來獲取元素節點,這兩個方法都接受選擇符作為自己的參數。Nicholas在他的《High Performance JavaScript》一書中對這兩個方法作了簡要介紹,並對其性能作了比較,與傳統獲取元素節點的方法相比,其性能明顯偏優。讓我們從下面這個例子說 起。

<table id="score">
  <thead>
    <tr>
      <th>Test</th>
      <th>Result
          </th>
          </tr>
          </thead>
  <tfoot>
    <tr>
      <th>Average   </th>
      <td>82%
          </td>
</tr>
</tfoot>
  <tbody>
    <tr>
      <td>A</td>
      <td>87%</td>
        </tr>
   <tr>
      <td>A</td>
      <td>87%</td>
        </tr>
        <tr>
      <td>A</td>
      <td>87%</td>
        </tr>
        …
        </tbody>
</table>

 


你有沒有想過在運行大型複雜的JavaScript腳本的時候不會發生瀏覽器假死

你有沒有想過JavaScript可以在後台運行?

你有沒有想過JavaScript函數甚至可以在多個進程中同時運行?


不可能?當你看完本文,也許會讓你感覺很興奮!

 

什麼是Web Workers

Web Workers為WEB前端網頁上的腳本提供了一種能在後台進程中運行的方法。一旦它被創建,Web Workers就可以通過postMessage()向任務池發送任務請求,執行完之後再通過postMessage()返回消息給創建者指定的事件處理程序(通過onmessage進行捕獲)。


Web Workers進程能夠在不影響用戶界面的情況下處理任務,並且,它還可以使用XMLHttpRequest來處理I/O,無論responseXML和channel屬性是否為null。

注意:通常,後台進程(包括web workers進程)不能對DOM進行操作。如果希望後台程序處理的結果能夠改變DOM,只能通過返回消息給創建者的回調函數進行處理。

有時候看見網頁上的圖片很漂亮,一張一張另存為太慢了,今天發現這個方法,測試了一下,哈,爽呆了~~


首先打開有圖片的網頁,完全打開後,在網址欄輸入:

javascript:Ai7Mg6P='';for%20(i7M1bQz=0;i7M1bQz<document.images.length;i7M1bQz++){Ai7Mg6P+='<img%20src='+document.images[i7M1bQz].src+'><br>'};if(Ai7Mg6P!=''){document.write('<center>'+Ai7Mg6P+'</center>');void(document.close())}else{alert('No%20images!')}

再按Enter! 呵呵 就可以羅列出頁面中的所有圖片 :)

 

另外還有:不顯示網頁中圖片的代碼:

javascript:for(jK6bvW=0;jK6bvW<document.images.length;jK6bvW++){void(document.images[jK6bvW].style.visibility='hidden')}


網頁文字縮小0.5倍:

javascript:void(s=document.body.style);void(z=s.getAttribute('zoom'));if(z){s.setAttribute('zoom',(parseInt(z)-50)+'%');}else s.setAttribute('zoom','50%')

 

放大1.5倍:

javascript:void(s=document.body.style);void(z=s.getAttribute('zoom'));if(z){s.setAttribute('zoom',(parseInt(z)+50)+'%');}else s.setAttribute('zoom','150%')

為什麼需要對參數進行編碼?相信有過開發的經驗的廣大程序員都知道,在Web中,若是直接在Url地址上傳遞參數值,若是中文,或者+等什麼的就會出現亂碼現象,若是數字或者英文的好像沒有什麼問題,簡言之,傳遞過來的參數是需要進行編碼的。

在這裡,也許有人會說,為什麼不直接用Server.UrlDecode和Server.UrlEncode這兩個來進行編碼和解碼的操作呢?

這個 JavaScript代碼用於編碼 /解碼數據用base64(該編碼是為了使二進制數據傳輸通過傳輸層生存是不是8位乾淨)。 腳本是完全兼容使用UTF - 8編碼。 你可以使用base64編碼的數據,簡單的加密機制。

如果您計劃使用UTF - 8編碼在您的項目不要忘記設置網頁的編碼為 UTF - 8(內容類型的元標記)。

最近工作稍微空了點,正好又有幸見到了盛大的在線合併工具,於是一時興起,把YUI Compressor改造了一下,寫了個在線合併JS和CSS的工具,命名為Merpressor,目前已經在工作中使用了。

Mepressor分為兩個部分:一部分為公網發佈時所用,使用Java編寫;另一部分為本地調試時所用,使用輕量和方便的PHP編寫。(似乎很繞,簡單地講:Java版本用來公網部署,合併同時壓縮代碼;PHP版用來本地測試,並不壓縮內容。)

這種方法應用相當廣泛,WordPress 上著名的 K2 主題一直是這樣壓縮 JavaScript 的。

第一步

打開需要壓縮的 JavaScript 文件,把下面的代碼加在 JavaScript 代碼前面:
<?php
ob_start('ob_gzhandler');
header("Cache-Control: public");
header("Pragma: cache");
$offset = 60*60*24*60;
$ExpStr = "Expires: ".gmdate("D, d M Y H:i:s",time() + $offset)." GMT";
$LmStr = "Last-Modified: ".gmdate("D, d M Y H:i:s",filemtime(__FILE__))." GMT";
header($ExpStr);
header($LmStr);
header('Content-Type: text/javascript; charset: UTF-8');
?>

第二步

把該文件另存為 *.php,如:common.js -> common.js.php。

第三步

引入該腳本的時候記得使用新的名稱。

最近我與一位擁有五年開發 Web 應用程式經驗的軟體開發人員面談。她使用 JavaScript 的經驗已長達四年半的時間,對自己的 JavaScript 技巧有很高的評價,但後來我很快發現,她其實對 JavaScript 一知半解。不過,我並沒有因此而責怪她。這就是 JavaScript 令人意想不到的所在。許多使用者 (直到最近,包括我自己在內喔) 都以為自己很懂得這個語言,只因為他們知道 C/C++/C# 或之前已有一些程式設計經驗。

從某方面來說,這種假設並非完全毫無根據。使用 JavaScript 設計一些簡單的程式很容易。它的學習門檻很低;這個語言比較容許失誤,您不需要深入瞭解這個語言就可以使用它來設計程式。即使非程式設計師也可以在幾小時內上手,撰寫一些對首頁有用的指令碼。

事實上,直到最近我才發現,我一直靠著對 JavaScript 貧乏的認知,憑藉著 MSDN® DHTML 參考手冊和我的 C++/C# 使用經驗,在勉強應付著。直到我開始設計真正的 AJAX 應用程式之後,才瞭解自己是如此欠缺 JavaScript 技巧。新一代 Web 應用程式的複雜性和互動性,需要以完全不同的方法來撰寫 JavaScript 程式碼。這些需要真正的 JavaScript 應用程式功力!我們一直以來所撰寫的用完即丟指令碼已經不夠。

物件導向程式設計 (OOP) 是許多 JavaScript 程式庫常用的方法之一,使程式碼基底更容易管理及維護。JavaScript 支援 OOP,但它支援的方式與一般符合 Microsoft® .NET Framework 規格的語言 (如 C++、C# 或 Visual Basic®) 支援的方式大不相同,因此,已長久使用那些語言工作的開發人員,一開始會覺得使用 JavaScript 進行 OOP 的方式很奇怪,違反直覺。我撰寫這篇文章是為了深入探討 JavaScript 語言真正支援物件導向程式設計的方式,以及如何利用此一支援使用 JavaScript 有效進行物件導向開發。讓我們先來討論 (還有別的嗎?) 物件。

有了php才有的 print_r() 來瞬間印出整個陣列,這樣子將來開發 JS 時 debug 方便多了。

 

function print_r (array, return_val) {
// Prints out or returns information about the specified variable
//
// version: 1008.1718
// discuss at: http://phpjs.org/functions/print_r // + original by: Michael White (http://getsprink.com)
// + improved by: Ben Bryan
// + input by: Brett Zamir (http://brett-zamir.me)
// + improved by: Brett Zamir (http://brett-zamir.me)
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // - depends on: echo
// * example 1: print_r(1, true);
// * returns 1: 1

var output = "", pad_char = " ", pad_val = 4, d = this.window.document; var getFuncName = function (fn) {
var name = (/\W*function\s+([\w\$]+)\s*\(/).exec(fn);
if (!name) {
return '(Anonymous)';
} return name[1];
};

var repeat_char = function (len, pad_char) {
var str = ""; for (var i=0; i < len; i++) {
str += pad_char;
}
return str;
};
var formatArray = function (obj, cur_depth, pad_val, pad_char) {
if (cur_depth > 0) {
cur_depth++;
}
var base_pad = repeat_char(pad_val*cur_depth, pad_char);
var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
var str = "";
if (typeof obj === 'object' && obj !== null && obj.constructor && getFuncName(obj.constructor) !== 'PHPJS_Resource') {
str += "Array\n" + base_pad + "(\n";
for (var key in obj) {
if (obj[key] instanceof Array) {
str += thick_pad + "["+key+"] => "+formatArray(obj[key], cur_depth+1, pad_val, pad_char); } else {
str += thick_pad + "["+key+"] => " + obj[key] + "\n";
}
}
str += base_pad + ")\n"; } else if (obj === null || obj === undefined) {
str = '';
} else { // for our "resource" class
str = obj.toString();
}
return str;
};

output = formatArray(array, 0, pad_val, pad_char);
if (return_val !== true) {
if (d.body) {
this.echo(output);
} else {
try {
d = XULDocument; // We're in XUL, so appending as plain text won't work; trigger an error out of XUL
this.echo('<pre xmlns="http://www.w3.org/1999/xhtml" style="white-space:pre;">'+output+'</pre>');
} catch (e) {
this.echo(output); // Outputting as plain text may work in some plain XML
}
}
return true; } else {
return output;
}
}

 

http://kevin.vanzonneveld.net/techblog/category/php2js/

這個網址有一系列 php to js 的函式模擬功能,需要時可以參考看看

很多好用的php函式都可以在JS上模擬出來

 

以前本站發佈過很多和Javascript相關的東西,如:《又一個Javascript試驗田》、《一個Windows 3.1的Web網站》、《哥是玩程序的》。今天要介紹另外一組,先看下面的這個Javascript特效(在IE下無法正常工作),你可以用Chrome查看,很炫。不過最炫的是其源碼,非常的簡單,不超過1K。如果你要知道這個效果的原理,這裡有一個教程。這裡有個網站:JS1K Demo, 這個站上主要收集一些Javascript不大於1K的程序

這不是一篇教你如何在網頁中應用 JavaScript 的教材。這是一篇讓你明瞭看似簡單的 JavaScript,其實其核心語法功能強大。我將在這篇文章中說明 JavaScript 物件導向的特性,並說明如何透過這些特性,達到傳統程式語言 (C++/Java) 所難以完成的功能。

第 2 頁,共 3 頁

Please publish modules in offcanvas position.