【问题标题】:How do I store 'this' element for later我如何存储“这个”元素以备后用
【发布时间】:2012-09-08 01:15:19
【问题描述】:

我是 JavaScript 和 jQuery 的新手,所以如果我不熟悉,请告诉我。 我正在使用此处的 cookie 插件:https://github.com/carhartl/jquery-cookie

我有一个带有动态链接的页面。他们通过 URL 中的一些 GET 信息将用户发送到他们已经在的同一页面。我希望能够突出显示上一个单击的链接。

我的想法是将点击的元素存储在 cookie 中,然后为该元素添加一个类。

设置 cookie

$("td.column1").on({
    click: function () {
      $.cookie('productCookie', this); //How do I store 'this' into the cookie?
    }
});

获取 cookie

var productValue = $.cookie('productCookie');
$(productValue).addClass("select singleselected");

没有 cookie 的代码

根据经验,我知道这行代码在我添加链接之前有效,这也是在重新绘制页面之前。

$(this).addClass("select singleselected");

我尝试研究 this 关键字的工作原理,但恐怕我不确定 addClass 方法获取的是什么选择器或如何获取当前元素。

使用的解决方案

function getParameters(geturl, columnNumber) {
    var url = geturl,
        urlRegExp = new RegExp(url.replace(/\/$/, ''));

    $(columnNumber).each(function () {
        if (urlRegExp.test(this.href)) {
            $(this).addClass("singleselected select");
        }
    });
}

【问题讨论】:

  • Cookies 只能存储字符串或数字,不能存储 DOM 元素。您需要存储单击链接的一些唯一属性——HREF 或 ID 或索引号——而不是 this。如果没有看到您的 HTML,我无法提供更多详细信息。
  • 我通常发现通过查看当前 url 添加类服务器端更容易。您仍然可以在 javascript 中查看当前 url 并执行相同操作。
  • 你使用什么服务器端语言?
  • 仅供参考,我建议不要使用 cookie。有些人禁用它们。如果有人从谷歌获得链接怎么办?这样您就不会在 cookie 中存储一些东西来突出显示所选页面。
  • 我正在使用 MVC3。我知道有些人不使用 cookie。这些人已经这样做了。此外,我已经在 J​​avaScript 代码中做出了许多决定,这些决定与此代码所依赖的决定相同。保持这个客户端保持干燥。

标签: javascript jquery jquery-selectors this


【解决方案1】:

查看此线程:jQuery add class .active on menu

基本思路是你解析当前的url,根据url找到激活的锚标签。

【讨论】:

  • 这不使用cookies。这是一种我认为更适合您的替代方法。
  • 我喜欢这个的样子,我会在星期二回去工作的时候试试这个。
【解决方案2】:

如果您的元素有 ID,您可以将元素的 ID 保存在 cookie 中,并在下一个页面加载时突出显示它。 Cookie(和 localStorage,就此而言)只能存储字符串,或者可以序列化为字符串的东西。 HTML 元素不可序列化。

【讨论】:

    【解决方案3】:

    Cookie 保存字符串。您将需要存储一些基于字符串的指示符,以指示单击了哪个链接。

    它可以是表中的 id 或行号或类似的东西。然后,当您在页面加载时读取 cookie 时,您可以找到与该指示符匹配的 DOM 元素并相应地更改它。

    您不能将 DOM 元素引用存储在 cookie 中,因为 DOM 元素引用不是字符串,并且它们不会从一个页面加载到下一个页面持续存在。特定的 DOM 元素引用仅存在于给定页面中。

    如果您显示包含您要保存的内容的实际 HTML,我们可以更具体地参考保存在 cookie 中的意义。如果是表格,可能是行/列计数(转换为字符串形式)。如果每个链接都有唯一的 id,那么最简单的方法就是存储 id。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多