【问题标题】:Javascript - setting a cookie and pull into IDJavascript - 设置 cookie 并拉入 ID
【发布时间】:2016-05-05 13:44:02
【问题描述】:

所以我有下面的代码,它从 URL 中提取一个“参数”并替换我的 HTML 中名为“demo”的 ID:示例:sample.com?demo=test

function getUrlParameter(sParam) { 
    var sPageURL = window.location.search.substring(1); 
    var sURLVariables = sPageURL.split('&'); 
    for (var i = 0; i < sURLVariables.length; i++) { 
        var sParameterName = sURLVariables[i].split('='); 
        if (sParameterName[0] == sParam) { 
            return sParameterName[1]; 
        } 
    } 
}
var demo = decodeURIComponent(getUrlParameter('demo')); 
document.getElementById('demo').innerHTML = demo;

然后我有下面的代码,它做同样的事情,除了它从 cookie 中提取

function getCookie(c_name) { 
    if (document.cookie.length>0) { 
        c_start=document.cookie.indexOf(c_name + "="); 
        if (c_start!=-1) { 
            c_start=c_start + c_name.length+1; 
            c_end=document.cookie.indexOf(";",c_start); 
            if (c_end==-1) 
                c_end=document.cookie.length; 
            var cookieContent = "Welcome back " + unescape(document.cookie.substring(c_start,c_end)); 
            document.getElementById('demo').innerHTML = cookieContent; 
        } 
    } 
} 
getCookie('demo');

我想做的是写一些立即从参数中提取的内容,如果用户在没有 URL 参数的情况下返回页面,则从 cookie 中提取。我认为这是某种 IF 语句。但是我对如何将这两个脚本结合在一起以同步工作感到困惑。

所以本质上,如果demo 在 URL 中,则插入 = demo 的任何 ID,如果不是,则查看 cookie。 如果我可以在参数中添加空格,那也很棒。所以如果网址:sample.com?demo=this+is+a+test 拥有 ID = 这是一个测试

大部分情况下我都想通了。但是,在我的 HTML 文档中,所有称为“演示”的 ID 都变为“未定义”。 我的 HTML 如下所示:欢迎新用户

如果没有设置参数或 cookie,我希望它显示“新用户”或 ID 中显示的任何内容。希望这是有道理的。

【问题讨论】:

  • 我的眼睛在流血。请正确格式化您的帖子。
  • 很抱歉,这次失败了。

标签: javascript cookies


【解决方案1】:

取出getCookie 中的innerHTML 赋值,让它在找到请求的cookie 时简单地返回cookieContent。然后就可以测试函数的返回值了。

var demo = getUrlParameter('demo') || getCookie('demo');
if (demo) {
    document.getElementById('demo').innerHTML = demo;
}

【讨论】:

  • 太棒了,谢谢!我注意到我的内容中的跨度显示为“未定义”,因为它在上面的脚本中分类。如果用户删除 URL,我不希望文本显示未定义。我怎样才能避免这种情况? 唯一可识别的元素。 所以我希望文本显示“唯一可识别的元素”。除非它在 ​​URL 或 cookie 中声明。希望这是有道理的。
  • 另外,如果我的参数是: demo=this+is+a+test 我怎样才能将这些 + 变成我的内容/文本中的空格?我的内容中不能有 + 。很想知道如何做到这一点。感谢帮助。祝你有美好的一天!
  • 它不应该显示为undefined,因为在这种情况下if() 应该跳过innerHTML 分配。除非您将文字字符串“未定义”放入 cookie。
  • 您可以使用decodeURIComponentfoo+bar 等URL 组件转换为foo bar
  • 谢谢 :) 这看起来怎么样? var demo = decodeURIComponent(getUrlParameter('demo').replace(/‌​\+/g, " "));
猜你喜欢
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 2014-02-15
相关资源
最近更新 更多