【问题标题】:jQuery to remove div & set cookie to never show againjQuery 删除 div 并将 cookie 设置为不再显示
【发布时间】:2016-06-15 11:35:33
【问题描述】:

点击链接后,我正在使用以下 html / jQuery 删除 div。

单击链接时,我还需要设置一个 cookie,当同一访问者返回网站时,该 div 会保持“已删除”状态。

HTML

<div id="close-me">
    bye bye - being removed on click of close link
</div>

<p>
  <a href="#" class="close-div">Close</a>
</p>

jQuery

jQuery(document).ready(function( $ ) {
  jQuery(".close-div").click(function(){
    jQuery("#close-me").remove();
  });
});

我认为 jquery.cookie.js 是最好的解决方案。

我该怎么做?

JSfiddle here

【问题讨论】:

标签: jquery html function cookies click


【解决方案1】:

你可以做这样的事情(没有插件):

var setCookie = function(cname, cvalue, exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
  var expires = "expires=" + d.toUTCString();
  document.cookie = cname + "=" + cvalue + "; " + expires;
}

var getCookie = function(cname) {
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for (var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') c = c.substring(1);
    if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
  }
  return "";
}

jQuery(document).ready(function($) {
  console.log(getCookie("closed"));
  if (getCookie("closed") == "closed") {
    $("#close-me").hide();
  }

  jQuery(".close-div").click(function() {
    jQuery("#close-me").remove();
    setCookie("closed", "closed", 365)
  });
});

您的小提琴已更新:https://jsfiddle.net/nn42z27t/

这个例子来自:http://www.w3schools.com/js/js_cookies.asp

【讨论】:

    【解决方案2】:

    jQuery Cookie 不再维护,所以我不会这么做。相反,您可以使用js-cookie,这是 jQuery Cookie 开发团队推荐的替代品。

    一旦加载,它将是:

    jQuery(document).ready(function($) {
        if (typeof Cookies.get('hide-div') !== 'undefinied') {
            $("#close-me").remove();
        }
    
        $(".close-button").click(function() {
            $("#close-me").remove();
            Cookies.set('hide-div', true);
        });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/js-cookie/2.1.2/js.cookie.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <div id="close-me">
      <i class="close-button">&times;</i>
      Your content here
    </div>

    【讨论】:

    • 有没有办法编辑 jQuery 以便它捕获域的根并从所有页面中删除相同的 div?目前它仅从 /about-us 或 /contact-us 中删除 - 当您单击另一个页面时,具有相同 ID 的 div 仍然存在。
    • jQuery 只在它执行的页面上工作。所以你可以“将它运行到你的根主机”。但是,如果您在所有页面上或在所有页面上的网站页眉/页脚中包含该脚本,则可以使用;)
    • 代码中有拼写错误。写成“未定义”,应该是“未定义”
    【解决方案3】:

    您确实可以在这里使用 jQuery cookie 库。加载一次检查cookie是否设置并删除div,单击删除链接设置cookie一次,如下所示:

    jQuery(document).ready(function($) {
        if ($.cookie('hide-div')) {
            $("#close-me").remove();
        }
    
        $(".close-div").click(function() {
            $("#close-me").remove();
            $.cookie('hide-div', true);
        });
    });
    

    Updated fiddle

    不要忘记在您的页面中包含 jQuery cookie 库。我使用了来自this CDN 的副本。

    【讨论】:

    • 我唯一的问题是它从视图/浏览器中删除了 div - 但是当我查看源代码时我仍然看到 div ...我需要完全删除 div 和里面包含的所有内容其中。我正在尝试完全删除整个 div 以及包含的图像上的所有内容,以便下次加载。
    • 无法从客户端的源中删除某些内容。 jQuery 的remove() 方法只从DOM 中删除元素。如果您需要这种行为,则需要检查服务器上的 cookie 并在将 HTML 发送到浏览器之前对其进行更改。
    • 有没有一种简单的方法来检查用户 cookie 服务器端并在发送到浏览器之前更改 HTML?
    • 是的,但是如何操作取决于您使用的服务器端语言。您最好为此提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多