全角英数字を半角英数字に変換する方法

DOM のお勉強をしている最中に出てきたサンプルコード、全角英数字を半角英数字に変換する、というものの解法が面白かった。
Unicode の表を見てみると例えば全角の A は 0xFF21 で半角の A は 0x41 で、差分は 0xFEE0 となる。全角英数字と半角英数字の並びは同一なので、この値は B, C …とずっと一緒となる。
なので全角英数字を半角英数字にするためには 0xFEE0 を引けばいい。
参考:
Unicode一覧 F000-FFFF - Wikipedia
Unicode一覧 0000-0FFF - Wikipedia
書いてみたコードはこれ。body タグ以下のすべてのノードの全角英数字を半角英数字にしている。

function load(){
	var body = document.getElementsByTagName("body")[0];
	recursive(body);
}
function recursive(body){
	for (var i = 0; i < body.childNodes.length; i ++){
		var cNode = body.childNodes[i];
		if(cNode.nodeType == 1){
			// 要素ノード
			recursive(cNode);
		}
		else if(cNode.nodeType == 3){
			// テキストノード
			cNode.nodeValue = convert(cNode);
		}
	}
}
function convert(cNode){
	var num = cNode.nodeValue.length;
	var str = "";
	var flag = false;
	for(var i = 0; i < num; i++){
		var cha = cNode.nodeValue.charCodeAt(i);
		if(cha >= 0xFF10 && cha <= 0xFF19 || cha >=0xFF21 && cha <= 0xFF3A || cha >=0xFF41 && cha <= 0xFF5A){
			// 変換処理
			flag = true;
			cha -= 0xFEE0;
		}
		str += String.fromCharCode(cha);
	}
	if (!flag){
		return str;
	}
	else{
		return cNode.nodeValue + ":" + str;
	}
}

それにしても DOM って名前しか聞いたことなかったけど、書いてみたらすごく便利。あと思うように操作できて楽しい!