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は文字列を保持しているため、コードは機能していません。ノード(技術的には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 に答える
1

このプラグインを使用している場合は、次の設定を試して$.cookie.json = true;ください。

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

これが機能しない場合は、JavaScript を使用したオブジェクトのデシリアライゼーションについて読むことができます。オブジェクトのシリアル化が本当に必要な場合は注意してください。シリアル化の前後に正確なオブジェクトが必要ない場合は、dgvid の答えがより良いアプローチです。これは、新しい変数/関数/リスナー/... でオブジェクトを拡張した場合にのみ当てはまります。

于 2013-03-15T13:10:20.190 に答える