2

我正在使用 jquery.treeview.js。我需要在页面加载时突出显示节点背景颜色。单击时,我可以突出显示背景颜色和字体等。

    $("a").css("backgroundColor", "");
    $("a").css("font-weight", "");
    $(this).css("backgroundColor", "grey");
    $(this).css("font-weight", "bold");
    $.cookie("url", $(this));

现在我将这个对象保存在一个 cookie 中,并且能够读取相同但无法应用 css,因为它说没有这样的属性。

    $.cookie("url").css("backgroundColor", "grey");

为什么我没有从 cookie 中获取 jQuery 对象?

4

2 回答 2

1

如果您正在使用插件,请尝试设置$.cookie.json = true;

$.cookie.json = true;
...
$.cookie("url", $(this));
...
$.cookie("url").css("backgroundColor", "grey");

如果这不起作用,您可以在此处阅读有关使用 JavaScript 进行对象反序列化的信息。如果您确实需要对象序列化,请小心,如果您不需要序列化前后的确切对象,dgvid 的答案是更好的方法。仅当您使用新变量/函数/侦听器/...扩展对象时才会出现这种情况。

于 2013-03-15T13:10:20.190 回答
1

您的代码不起作用,因为 cookie 包含字符串,仅此而已。您的节点(技术上是 jQuery 对象的实例)不是字符串。将Javascript 对象序列化为 Cookie的文章对如何做你想做的事有一个很好的概述。

但是,对于您的特定需求,您可能可以做一些比该文章中描述的更简单的事情。如果您确定要突出显示的节点将始终具有非空 id,则可以将已经是字符串的 id 保存在 cookie 中。当您从 cookie 中返回 id 时,您可以将其用作选择器来获取您想要的对象。例如:

// Works only if `this` has id attribute set:
$.cookie("url", this.id);


// Later...
var id = $.cookie("url");
$("#" + id).css("backgroundColor", "grey");
于 2013-03-15T13:10:57.243 回答