使用new运算符将data()添加到html元素

时间:2015-05-14 11:05:37

标签: javascript jquery

我刚刚编写了一个非常简单的代码片段来了解jQuery ROW的功能如何,代码如下:

data()

现在,此代码的目标是使用$(function () { carousel = function() { this.prop1 = 1; this.prop2 = 'two'; this.prop3 = 3; } var _str = $('#test'), $str_data = _str.data(); console.log($str_data); data = _str.data('carousel'); if (!data) _str.data('carousel' , new carousel()); console.log(data); if (!data) { console.log('no data'); } }); 运算符将数据()添加到div元素,然后检查是否添加了该数据,但是在我的代码片段中我使用下面的代码行向new元素添加数据:

div

当我再次检查以查看下一行是否实际添加了数据时:

if (!data) _str.data('carousel' , new carousel()); 

测试通过,这意味着没有添加任何数据。那我错过了什么?

2 个答案:

答案 0 :(得分:1)

如果没有数据,则表示您正在更新与该元素关联的数据,但data变量引用的值未更新,这就是为什么它仍然将undefined作为其值。< / p>

$(function () {

    var carousel = function () {
        this.prop1 = 1;
        this.prop2 = 'two';
        this.prop3 = 3;
    }

    var _str = $('#test'),
        $str_data = _str.data();

    console.log($str_data);

    var data = _str.data('carousel');

    if (!data) {
        //create a new carousel and assign it to data so that it gets a new value
        data = new carousel();
        //store the new carousel value
        _str.data('carousel', data);
    }

    console.log(data);

    if (!data) {
        console.log('no data');
    }

});

演示:Fiddle

答案 1 :(得分:1)

问题是您没有更新data变量的值。您需要在设置轮播后再次设置data值或直接调用jquery函数.data(),如下所示:

data = _str.data('carousel');

// this condition is not updating the variable defined above
if (!data) {
    _str.data('carousel' , new carousel());
}

console.log(data);  

// you have to update the variable value or to call as
if (!_str.data('carousel')) {
    console.log('no data');
}