2009年8月17日

正则表达式的正向预查

匹配一段字符串比如123S456E789中的456,通常写法就是S\d+E,这样取到以后还得再去除前面的S和后面的E。使用正向预查,可以写成(?<=S)\w+(?=E),这样可以直接就匹配到了456。

//正则表达式匹配
string result = Regex.Match("123S456E789", @"(?<=S)\w+(?=E)").Value;

posted @ 2009-08-17 08:53 Lionheart Zhang 阅读(133) 评论(0) 编辑

动态添加JavaScript

//在页面顶部添加脚本
if (!Page.ClientScript.IsClientScriptBlockRegistered("myscriptKey"))//判断是否已经存在相同//键值的ScriptBlock
{
    string myScript = @"function AlertHello(){alert('hello xuanhun!!');}";//脚本内容
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "myscriptKey", myScript, true);
}

//在页面底部添加脚本
if (!Page.ClientScript.IsStartupScriptRegistered("footscriptkey"))
{
    string CallScript = @"AlertHello();";
    Page.ClientScript.RegisterStartupScript(this.GetType(), "footscriptKey", CallScript, true);
}

// 添加对js文件的引用
if (!Page.ClientScript.IsClientScriptIncludeRegistered("incluedeKey"))
{
    string IncludeScript = @"/js/ShowHello.js";
    Page.ClientScript.RegisterClientScriptInclude("includeKey", IncludeScript);
}

posted @ 2009-08-17 08:40 Lionheart Zhang 阅读(45) 评论(0) 编辑

IE不确认关闭窗口

window.opener=null;window.close();在IE6正常,在IE7/IE8下就弹出要关闭窗口前的提示。解决方法如下:
<a href="#" onclick="window.opener=null;window.open('','_self');window.close();">不确认关闭 </a>

posted @ 2009-08-17 08:37 Lionheart Zhang 阅读(181) 评论(1) 编辑

GridView边框样式简单美化

主要就是这一句:.Grid th和.Grid td,将会给class="Grid"的table中的th和td标签应用样式,而GridView生成的HTML代码是Table,这样就解决了GridView的边框问题。
GridView添加CssClass="Grid"属性,样式表如下:

<style type="text/css">
    .Grid
    {
        border-collapse: collapse;
        border: solid 1px #93c2f1;
        width: 98%;
        font-size: 10pt;
    }
    .Grid td
    {
        border-collapse: collapse;
        border: solid 1px #93c2f1;
        font-size: 10pt;
    }
    .Grid th
    {
        border-collapse: collapse;
        border: solid 1px #93c2f1;
        font-size: 10pt;
        background-color: #e4f6ff;
    }
</style>

posted @ 2009-08-17 08:32 Lionheart Zhang 阅读(1370) 评论(0) 编辑

加入收藏夹,设为首页,火狐和IE兼容的JS

火狐浏览器(FF)不支持普通的象IE那样的加入收藏夹和设为首页,于是就找了关于FF的方法。后来测试了下,可以用了。。其代码如下:

<script type="text/javascript">
    function AddFavorite(sURL, sTitle) {
        try {
            window.external.addFavorite(sURL, sTitle);
        }
        catch (e) {
            try {
                window.sidebar.addPanel(sTitle, sURL, "");
            }
            catch (e) {
                alert("加入收藏失败,请使用Ctrl+D进行添加");
            }
        }
    }
    function SetHome(obj, vrl) {
        try {
            obj.style.behavior = 'url(#default#homepage)'; obj.setHomePage(vrl);
        }
        catch (e) {
            if (window.netscape) {
                try {
                    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
                }
                catch (e) {
                    alert("此操作被浏览器拒绝!\n请在浏览器地址栏输入“about:config”并回车\n然后将 [signed.applets.codebase_principal_support]的值设置为'true',双击即可。");
                }
                var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
                prefs.setCharPref('browser.startup.homepage', vrl);
            }
        }
    }
</script>

<a onclick="AddFavorite(window.location,document.title)">加入收藏</a>
<a onclick="SetHome(this,window.location)">设为首页</a>

posted @ 2009-08-17 08:26 Lionheart Zhang 阅读(253) 评论(0) 编辑

不改变的原有控件追加内容

追加HTML内容,我在做多文件上传的时候,用到了动态添加上传控件,但是发现一个问题,就是添加新的控件的时候,之前添加的控件的值会变空,我分析了一下原因,是因为我追加控件的时候是用的innerHTML+="内容"的,这样等于把div的控件直接重写了,所以控件会变空。
我找了下资料,知道了insertAdjacentHTML这个方法,用这个方法追加内容,不会改变原有控件的值,但是这个方法FF不使用。于是我继续找,在 http://www.cnitblog.com/yemoo/archive/2007/10/11/34711.html看到了兼容IE和FF的方法,经过试验,确实可以,但是方法太复杂了。这时,从朋友那里得到了一段JS:

function addFile() {
    var div1 = document.getElementById('divFiles');
    input1 = document.createElement("INPUT");
    input1.setAttribute("type", "file");
    input1.setAttribute("name", "File");
    div1.appendChild(input1);
    div1.appendChild(document.createElement("br"));
}

这是用DOM实现的,IE/FF都支持,要比之前的从EXTJS中提取的要精简的多。
PS:前一个方法也写出来

function insertHtml(where, el, html) {
    where = where.toLowerCase();
    if (el.insertAdjacentHTML) {
        switch (where) {
            case "beforebegin":
                el.insertAdjacentHTML('BeforeBegin', html);
                return el.previousSibling;
            case "afterbegin":
                el.insertAdjacentHTML('AfterBegin', html);
                return el.firstChild;
            case "beforeend":
                el.insertAdjacentHTML('BeforeEnd', html);
                return el.lastChild;
            case "afterend":
                el.insertAdjacentHTML('AfterEnd', html);
                return el.nextSibling;
        }
        throw 'Illegal insertion point -> "' + where + '"';
    }
    var range = el.ownerDocument.createRange();
    var frag;
    switch (where) {
        case "beforebegin":
            range.setStartBefore(el);
            frag = range.createContextualFragment(html);
            el.parentNode.insertBefore(frag, el);
            return el.previousSibling;
        case "afterbegin":
            if (el.firstChild) {
                range.setStartBefore(el.firstChild);
                frag = range.createContextualFragment(html);
                el.insertBefore(frag, el.firstChild);
                return el.firstChild;
            } else {
                el.innerHTML = html;
                return el.firstChild;
            }
        case "beforeend":
            if (el.lastChild) {
                range.setStartAfter(el.lastChild);
                frag = range.createContextualFragment(html);
                el.appendChild(frag);
                return el.lastChild;
            } else {
                el.innerHTML = html;
                return el.lastChild;
            }
        case "afterend":
            range.setStartAfter(el);
            frag = range.createContextualFragment(html);
            el.parentNode.insertBefore(frag, el.nextSibling);
            return el.nextSibling;
    }
    throw 'Illegal insertion point -> "' + where + '"';
}

posted @ 2009-08-17 08:21 Lionheart Zhang 阅读(141) 评论(2) 编辑