我有一个DIV   
<div id="base"></div>
JS如下
<script type="text/javascript">
function Person()
{
this.name;
this.sex;
this.age;
}
function setAtt()
{
var myPerson = new Person();
myPerson.name = "名字";
myPerson.sex = "男";
myPerson.age = "26";
var objBase = document.getElementById("base");
objBase.setAttribute("Person",myPerson);
}
function getAtt()
{
var objBase = document.getElementById("base");
var myPerson = objBase.getAttribute("Person");
alert(typeof(myPerson));
alert(myPerson.constructor);
alert(myPerson.name + "---" + myPerson.sex + "---" + myPerson.age);
}
</script>
当在IE下,首先调用setAtt()方法,对DIV附加属性"Person"后,调用getAtt()方法提示如下.
alert(typeof(myPerson))   为 OBJECT;
alert(myPerson.constructor)  为  function Person(){...}
alert(myPerson.name + "---" + myPerson.sex + "---" + myPerson.age) 为 名字---男---26在FireFox 下
alert(typeof(myPerson)) 为 string
alert(myPerson.constructor)  为 function String(){...}
alert(myPerson.name + "---" + myPerson.sex + "---" + myPerson.age) 为 undefind---undefind---undefind
请问...我要如何做才能获取和IE下一样的结果...
前提是  实例化的对象必须要做为属性附给  DIV?????

解决方案 »

  1.   

    function Person()
    {
    this.name;
    this.sex;
    this.age;
    }
    Person.prototype.toString = function() {
    return "{name:'"+ this.name + "',sex:'" + this.sex + "',age:" + this.age+"}";
    };
    function setAtt()
    {
    var myPerson = new Person();
    myPerson.name = "名字";
    myPerson.sex = "男";
    myPerson.age = "26";
    var objBase = document.getElementById("base");
    objBase.setAttribute("Person",myPerson.toString());
    }
    function getAtt()
    {
    var objBase = document.getElementById("base");
    var myPerson = objBase.getAttribute("Person");
    myPerson = eval("("+myPerson+")");
    alert(myPerson.name + "---" + myPerson.sex + "---" + myPerson.age);
    }
      

  2.   

    w3c 标准 文档元素的属性值是字符串,所以只能放字符串,可以把对象转换成字符串保存<div id="base"></div><script type="text/javascript">
    // 把对象序列化成json 字符串
    function obj2str(o){
        var r = [];
        if(typeof o =="string") return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\"";
        if(typeof o =="undefined") return "undefined";
        if(typeof o == "object"){
            if(o===null) return "null";
            else if(!o.sort){
                for(var i in o)
                    r.push(i+":"+obj2str(o[i]))
                r="{"+r.join()+"}"
            }else{
                for(var i =0;i<o.length;i++)
                    r.push(obj2str(o[i]))
                r="["+r.join()+"]"
            }
            return r;
        }
        return o.toString();
    }function Person()
    {
    this.name;
    this.sex;
    this.age;
    }
    function setAtt()
    {
    var myPerson = new Person();
    myPerson.name = "名字";
    myPerson.sex = "男";
    myPerson.age = "26";
    debugger;
    var objBase = document.getElementById("base");
    objBase.setAttribute("Person",obj2str(myPerson));
    }
    function getAtt()
    {
    debugger;
    var objBase = document.getElementById("base");
    // 用eval 把json 字符串转换成 js 对象
    var myPerson = eval("("+ objBase.getAttribute("Person")+")");
    alert(typeof(myPerson));
    alert(myPerson.constructor);
    alert(myPerson.name + "---" + myPerson.sex + "---" + myPerson.age);
    }
    setAtt();
    getAtt();
    </script>