原创 IE5实现高版本的String.prototype.replace功能收藏

新一篇: 省市县三级关联菜单 | 旧一篇: 经典问题:向setTimeout传递函数参数

在script5.6以上string的replace新增了功能,第二个参数可以是一个函数。

在实际使用时这个功能是十分有用的,可以实现嵌套的替换。现在来讲解一下如何在IE5中也实现该功能。如有讲得不到之处请指正。

<SCRIPT LANGUAGE="JavaScript">

<!--

/*

 * Author : 蒲佛信

 * Date : 2006-4-9

 */

String.replace = String.prototype.replace;

//保存原有的replace功能

if ("".replace(/^/,String))

String.prototype.replace = function (r, m)

{

    if (typeof m == "function")

    {

        if (typeof r == "string")

        {

            //只调用一次function

            return String.replace.call(this, r, m(r));

        }

        else if (r && r.constructor == RegExp)

        {

            var mc;

            var s1 = this, s2 = "";

            var r2 = new RegExp(r.source, r.ignoreCase ? "i" : "");

            //循环调用function替换

            while (s1 && (mc = r2.exec(s1)))

            {

                s2 += s1.slice(0, mc.index) + m.apply(null, mc);

                s1 = s1.slice(mc.index + mc[0].length);

                if (!r.global) break;

            }

            return s2 + s1;

        }

        else

        {

            //调用原来的replace功能

            return String.replace.call(this, String(r), m);

        }

    }

    else

    {

        return String.replace.call(this, r, m);

    }

}

//-->

</SCRIPT>

 

 
 以上函数在IE6和Firefox1.2测试通过.

发表于 @ 2006年04月09日 17:10:00|评论(loading...)|编辑

新一篇: 省市县三级关联菜单 | 旧一篇: 经典问题:向setTimeout传递函数参数

评论

#fqf 发表于2006-06-14 17:38:00  IP: 218.19.218.*
终于找到阿信了 找了一年
原有的http://fason.nease.net空间访问不了了

里面有很多很多值得学习的东西

现在新开了网站吗?

期待中
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © fason