我如何存储“这个”元素以备后用

Posted

技术标签:

【中文标题】我如何存储“这个”元素以备后用【英文标题】: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 代码中做出了许多决定,这些决定与此代码所依赖的决定相同。保持这个客户端保持干燥。 【参考方案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。

【讨论】:

以上是关于我如何存储“这个”元素以备后用的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库循环中获取值并将它们相加以备后用

如何将两个文件合二为一以备后用

使用 activemerchant 保存付款以备后用

闪烁词法分析器帮助。试图保存特定的线路信息以备后用

List元素排序简例

JavaScript通过元素id和name直接获取元素的方法