JScript

IE に実装されているクライアントサイド・スクリプトです。JavaScript 互換でよく出来てます。
更新日 2016-02-13

概要

IE で動くクライアントサイドスクリプトです。比較的高速で動作し、柔軟なオブジェクト指向プログラミングができます。 HTML ページ上の全てのタグ(エレメント) のイベントドリブンにも使われます。さらにCOM オブジェクトも呼べるので、 ブラウザの制限を越えて動かす事も可能です。

サンプル

カーソルを重ねると文字列が変わるページ
<html>
	<head>
		<script type="text/JScript">
function OnMouseOver(Ref)
{
	Ref.children(0).style.display = "none";
	Ref.children(1).style.display = "";
}

function OnMouseOut(Ref)
{
	Ref.children(1).style.display = "none";
	Ref.children(0).style.display = "";
}
		</script>

	</head>
	<body>
		<div onmouseover="OnMouseOver(this);" onmouseout="OnMouseOut(this);">
			<span>
文字列1
			</span>
			<span style="display:none;">
文字列2
			</span>
		</div>
	</body>
</html>

汎用スクリプト

汎用のオリジナル・スクリプトを公開しています。ご自由にお使いください。

文字列置換

文字列置換関数です。変換パターンを参考にして下さい。
RefStr は編集前の文字列です。変換処理済みの文字列を返します。
// 置換 Ref1 => Ref2
function Replace(RefStr, Ref1, Ref2)
{
	var n = 0;
	var n2 = 0;
	while( (n = RefStr.indexOf(Ref1,n)) != -1)
	{
		n2 = n + Ref1.length;

		RefStr = RefStr.substring(0, n) + Ref2 + RefStr.substring(n2, RefStr.length);
		n += Ref2.length;
	}
	return RefStr;
}
// 置換 Ref1〜Ref2 => Ref3 
function ReplaceEx(RefStr, Ref1, Ref2, Ref3)
{
	var n = 0;
	var n2 = 0;
	while( (n = RefStr.indexOf(Ref1,n)) != -1)
	{
		n2 = RefStr.indexOf(Ref2,n+Ref1.length);
		if (n2 == -1)
		{
			break;
		}

		n2 += Ref2.length;
		RefStr = RefStr.substring(0, n) + Ref3 + RefStr.substring(n2, RefStr.length);
		n += Ref3.length;
	}
	return RefStr;
}
// 使用例
var str = "This is $$NAME$$.";
str = Replace( str, "$$NAME$$", "Mr.Incredible");
// str == "This is Mr.Incredible."

str = ReplaceEx( str, "Mr.", ".", "Mrs. Elastigirl");
// str == "This is Mrs. Elastigirl"

文字列クリッピング

指定の文字列の前後を指定の文字列で括ります。
// 括る Ref1 => Ref2 + Ref1 + Ref3
function Clip(RefStr, Ref1, Ref2, Ref3)
{
	var n = 0;
	var n2 = 0;
	while( (n = RefStr.indexOf(Ref1,n)) != -1)
	{
		n2 = n + Ref1.length;

		RefStr = RefStr.substring(0, n) + Ref2 + Ref1 + Ref3 + 
				 RefStr.substring(n2, RefStr.length);
		n +=  Ref2.length + Ref1.length + Ref3.length;
	}
	return RefStr;
}
// 括る Ref1〜Ref2 => Ref3 + Ref1〜Ref2 + Ref4
function ClipEx(RefStr, Ref1, Ref2, Ref3, Ref4)
{
	var n = 0;
	var n2 = 0;
	while( (n = RefStr.indexOf(Ref1,n)) != -1)
	{
		n2 = RefStr.indexOf(Ref2,n+Ref1.length);
		if (n2 == -1)
		{
			break;
		}

		n2 += Ref2.length;

		RefStr = RefStr.substring(0, n) + Ref3 + RefStr.substring(n, n2) + 
		Ref4 + RefStr.substring(n2, RefStr.length);

		n = Ref3.length + n2;
	}
	return RefStr;
}
// 使用例
var str = "This is Mr. Incredible.";
str = Clip(str, "Mr. Incredible.", "[", "]");
// str == "This is [Mr. Incredible.]"

str = ClipEx(str, "[", "]", "<", ">");
// str == "This is <[Mr. Incredible.]>" 

タブをスペースに展開

タブをスペースで展開し直します。タブサイズは任意に指定できます。
// タブ展開スクリプト
function TabSpread(RefStr, tabLen)
{
	var n = 0, n2 = 0;
	while (n2 != RefStr.length)
	{
		n2 = ((n2 = RefStr.indexOf("\r\n", n)) != -1) ? n2+2 : RefStr.length;

		var str = RefStr.substring(n, n2);

		var x = 0;
		while((x = str.indexOf("\t", x)) != -1)		
		{
			var strtab = "";
			for (i = (tabLen+x)%tabLen; i < tabLen; i++)
			{
				strtab += " ";
			}

			str = str.substring(0, x) + strtab + str.substring( x+1, str.length);
			x = x + strtab.length;
		}

		RefStr = RefStr.substring( 0, n ) + str + RefStr.substring( n2, RefStr.length );
		n = n + str.length;
	}

	return RefStr;
}
// 使用例
var str = "\\tThis is Mr. Incredible.".
str = TabSpread( str, 4);
// str == "    This is Mr. Incredible."

Cookie 管理

キー名と名前でCookie に設定(or取得)できます。
function setCookie(key, val)
{
	var R = "";

	if (key.length != 0)
	{
		var K = escape(key);
		var V = escape(val);
		var coo = document.cookie;

		var exp = "expires=";
		{
			var myDate = new Date();
			myDate.setTime( myDate.getTime() + (86400000*90) );
			var GMT = myDate.toGMTString();
			exp += GMT.substring(0, GMT.length-4) + ";";
		}

		if (coo.length != 0)
		{
			var n = coo.indexOf(K);
			if (n != -1)
			{
				n += K.length + 1;
				var n1 = coo.indexOf(";", n);
				if (n1 == -1)
				{
					n1 = coo.length;
				}

				R = unescape(coo.substring(n, n1));
				coo = coo.substring(0, n) + coo.substring(n1+1, coo.length);
			}
		}

		document.cookie = K + "=" + V + ";" + exp;
	}

	return R;
}

function getCookie(key)
{
	var R = "";

	if (key.length != 0)
	{
		var K = escape(key);
		var coo = document.cookie;

		if (coo.length != 0)
		{
			var n = coo.indexOf(K);
			if (n != -1)
			{
				n += K.length;
				if (coo.charAt(n) == "=")
				{
					n++;
					var n1 = coo.indexOf(";", n);
					if (n1 == -1)
					{
						n1 = coo.length;
					}

					R = unescape(coo.substring(n, n1));
				}
			}
		}
	}

	return R;
}