yamachan Ajax/.NET/C# メモ

2007-02-18

[JS] タグを処理する関数

Ajaxっぽいサンプルをいろいろ作成していますが、もう少し時間がかかりそうです。 今回は、その過程で作成した関数をご紹介します。

まずは単に & < > 文字を、&amp; &lt; &gt; に HTMLエスケープする escapeHTML() 関数。 そして戻す unescapeHTML() 関数です。

jp.rinco.escapeHTML = function(str) {
return str.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;");
}
jp.rinco.unescapeHTML = function(str) {
return str.replace(/&gt;/g, ">")
.replace(/&lt;/g, "<")
.replace(/&amp;/g, "&");
}

そして文字列から指定したタグの中身を取り出す、tagText() 関数です。

例えば str に "<title>aaa</title>"、tag_s に "<title>"、tag_e に "</title>" を指定し、その間に指定されたタグの中身 "aaa" を取り出します。

最後の引数は通常は false、str に指定した文字列が HTMLエスケープ されている場合に true を指定します。 例えば処理する文字列が "&lt;title&gt;aaa&lt;/title&gt;" のような場合に true にします。

※ これはレアケースのようですが、Domino サイトが対象の場合には有効です

jp.rinco.tagText = function(str,tag_s,tag_e,cflag){
if (tag_s == "" || tag_e == "")
return "";

var key_s=cflag?jp.rinco.escapeHTML(tag_s):tag_s;
var key_e=cflag?jp.rinco.escapeHTML(tag_e):tag_e;
var pos_s = str.indexOf(key_s);
var pos_e = str.indexOf(key_e);
if (pos_s < 0 || pos_e < 0)
return "";
else
return str.substring(pos_s+key_s.length, pos_e);
}

以上、ホントは String に prototype で組み込むのが JavaScript っぽいのですが。 単に関数にしちゃってる、弱気な僕なのでありました。

2007/2/27 追記: jp.rincoオブジェクト へ移動