你如何使用jQuery .data()来存储html?

时间:2010-04-04 00:39:29

标签: jquery

当我查找.data()的语法时,它给出了这样的例子:

$('body').data('foo', 52);

我正在进行AJAX加载,我想知道是否可以使用.data()存储传入的html,所以一旦加载了内容,如果再次点击相同的链接,我就不需要再做一次AJAX加载 - 我会检查.data键是否为空。

这样的事情有用吗?:

将#ajaxdiv的内容加载到存储中:

$('body').data('storage', div#ajaxdiv.html());

测试数据是否已加载:

if $('body').data('storage') != '' {

div#ajaxdiv.html($('body').data('storage'));

}

提前致谢!!

的Al

3 个答案:

答案 0 :(得分:1)

您需要撰写$('div#ajaxdiv').html

答案 1 :(得分:1)

编辑:再看一遍后,我不确定你为什么要将数据存储在body元素中。请记住,data()方法不能替代所有变量 - 只需要与给定元素关联的数据。有关详细信息,请参阅下面的示例。

应该可以正常工作。 data()方法就像将数据存储到变量中一样,但该数据现在可以方便地与元素本身相关联。

但是,您应该小心命名用于数据的密钥。在您的代码中,您使用的是'storage',但这非常通用,并且似乎非常容易与其他代码发生冲突。我建议使用前缀,例如:'blah.storage'

另外,SLaks是正确的 - 你的选择器需要通过jQuery传递。

// SLaks' correction and my namespace suggestion
$('body').data('blah.storage', $('#ajaxdiv').html());

// Alternative method, where #ajaxLink is the link you click to trigger
// the data retrieval
$('#ajaxLink').bind('click', function (e) {
    e.preventDefault();

    // Notice that we're using $(this).data(), so that our cache is associated
    // with the link element itself.

    if ($(this).data('blah.cachedAjaxHtml')) {
        // The data was found in the cache. Use it to populate the div.
        $('#ajaxDiv').html($(this).data('blah.cachedAjaxHtml'));
    } else {
        // Load the data via AJAX and store it in the cache
        var ajaxResult = whateverYouDoToLoadIt();

        $(this).data('blah.cachedAjaxHtml', ajaxResult);
        $('#ajaxDiv').html(ajaxResult);
    }
}

答案 2 :(得分:0)

$('body').data('storage', div#ajaxdiv.html());

......应该......

$('body').data('storage', $('#ajaxdiv').html());

...和...

div#ajaxdiv.html($('body').data('storage'));

......应该......

$('#ajaxdiv').html($('body').data('storage'));