since.2006  

直接上代码,其实就是围绕毫秒数做一些运算。

演示见:这里。

function WeekDate() {

    /**
     * 基准时间,所有计算以此为基础
     */
    var _calcDate = new Date();

    /**
     * 一天的豪秒数
     */
    var _day = 1000 * 60 * 60 * 24;

    this.getThisWeekDate = getThisWeekDate;
    this.getPrevWeekDate = getPrevWeekDate;
    this.getNextWeekDate = getNextWeekDate;
    this.wrapDate = wrapDate;

    this.getDayMillisecond = getDayMillisecond;

    /**
     * 取上周开始至上周结束日期
     *
     * @return Array [0]上周第一天 [1]上周最后一天
     */
    function getPrevWeekDate() {
        // 取上周结束日期
        var lastDay = new Date(_calcDate - (_calcDate.getDay()) * _day);
        // 取上周开始日期
        var firstDay = new Date((lastDay * 1) - 6 * _day);
        // 更新基准时间
        _calcDate = firstDay;

        return [wrapDate(firstDay), wrapDate(lastDay)];
    }

    /**
     * 取下周开始至下周结束日期
     *
     * @return Array [0]上周第一天 [1]上周最后一天
     */
    function getNextWeekDate() {
        // 取下周开始日期
        var firstDay = new Date((_calcDate * 1) + (6 - _calcDate.getDay() + 2) * _day);
        // 取下周结束日期
        var lastDay = new Date((firstDay * 1) + 6 * _day);
        // 更新基准时间        
        _calcDate = firstDay;

        return [wrapDate(firstDay), wrapDate(lastDay)];
    }

    /**
     * 取本周开始至本周结束日期
     *
     * @return Array [0]本周第一天 [1]本周最后一天
     */
    function getThisWeekDate() {
        _calcDate = new Date();
        // 第一天日期
        var firstDay = new Date(_calcDate - (_calcDate.getDay() - 1) * _day);
        // 最后一天日期
        var lastDay = new Date((firstDay * 1) + 6 * _day);

        return [wrapDate(firstDay), wrapDate(lastDay)];
    }

    function wrapDate($date) {
        var m = $date.getMonth() + 1;
        m = m < 10 ? "0" + m : m;

        var d = $date.getDate();
        d = d < 10 ? "0" + d : d;

        return $date.getFullYear() + "-" + m + "-" + d;            
    }

    function getDayMillisecond() {
        return _day;
    }
}

//var weekDate = new WeekDate();
//alert(weekDate.getNextWeekDate());
//alert(weekDate.getNextWeekDate());
//alert(weekDate.getThisWeekDate());
//alert(weekDate.getPrevWeekDate());
//alert(weekDate.getPrevWeekDate());
Posted by hee at 14:10 PM | Permalink | 评论(0)

IE下xmlhttp.responseText可以返回正确数据,xmlhttp.responseXML返回object,但xmlhttp.responseXML.documentElement却等于null。

如果在服务端设置了ContentType=text/xml还出现此问题,将<?xml version="1.0" encoding="gb2312"?>移到文件文件第一行试试。IE下返回数据头部有空行,也可能造成xmlhttp.responseXML.documentElement = null。

调试了俺几十分钟,最近在玩android,其它方面生疏了很多。

 

Posted by hee at 10:10 AM | Permalink | 评论(0)

最近要做一个画图的小东东,找到一个很强大的开源组件SpringGraph。

quote:

Flex 2.0开发的开源图形可视化组件——SpringGraph,它通过网络连接图的形式来表现事物间的联系,支持拖拽、放缩、自动排列、双击下钻等特性。

Demo:(在demo里点右键可以选择查看他的源代码)

不过作者主页貌似被GFW墙了,翻墙过去下载了源代码,放出来方便大家。:-)

 

Posted by hee at 13:06 PM | Permalink | 评论(1)

原来在firefox2以下版本中写XMLHttpRequest读取时,同步和异步请求都是onreadystatechange来设置回调函数,可是到firefox3中,同步请求通过设置onreadystatechange来判断数据是否读取貌似完成没有作用,换回下面方法就没问题了。

在 firefox2 以下版本中,xmlhttp同步/异步读取数据,可以使用下面方法来监测数据是否读取完毕:

transport.onreadystatechange = function () {    
    if (transport.readyState == 4) {    
        if (transport.status == 200) {    
            // do sth    
        } else {    
            // do sth    
        }    
    }    
}

在 firefox3 中测试时,xmlhttp同步读取数据,设置onreadystatechange不会产生回调。
需要在send方法后这样读取:

transport.send(null);    
        
if (transport.status == 200) {    
    // do sth    
} else {    
    // do sth    
}
Posted by hee at 19:06 PM | Permalink | 评论(1)
Component returned failure code: 0x804b00a
[nsIDOMHTMLFormElement.submit]

在Firefox下动态创建form并提交到其它页面时,有时会产生这个异常。
在IE下则没有这个问题。
比如这个:http://www.webdeveloper.com/forum/showthread.php?t=92006

在写这个博客后台的HTML编辑器时,也碰到了这个问题。

0x804b000a is NS_ERROR_MALFORMED_URI. Check whether using an absolute URI for action makes a difference.

解决方法:
看看form的action地址用的是不是相对路径,如果是相对路径,改为http://youdomain.com/action.php形式的完整URL试试。

PS:IMG标签在特定情况下也会出现这种问题。


Posted by hee at 14:04 PM | Permalink | 评论(0)

在修改这个日志编辑器时碰到的问题,IE中innerHTML插入html代码如果混杂有css样式表,当css样式插入在元素最前面时,IE会忽略这个样式。

演示(下面代码在IE中字体将是黑色,而firefox中会正确的显示为红色):

<HTML>   
   
<DIV id=test></DIV>   
<SCRIPT>   
document.getElementById("test").innerHTML += "<style>b{color:red}</style><b>hello!World!!!</b>";    
</SCRIPT>   
   
<HTML>

其它参考:PJHome的使用innerHTML插入样式。不过感觉这篇文章中说的不是很正确。

文中提到“IE对这里的顺序要严格要求。必须先插入html内容然后再插入<style>样式才生效。这样test这个div 里就会出现一个红色的 hello!World! 但是如果把<style>放到<b>前头,就被IE无视了。”

感觉上说的是CSS样式表需要放在使用这个样式表的元素前面。而实际上,插入内容时,只要有任意一个其它html元素就行了,比如br,pre,div等。:)

 

Posted by hee at 21:04 PM | Permalink | 评论(0)