如果我有一个包含值的 cookie 集,那么您当前使用的代码将像我使用 facebook 登录一样执行'fbsr_haha, gotcha'
也许这是正则表达式的工作:
/^|;\s*fbsr_[0-9]{4}\=[^;]+;/.test(document.cookie);
应该做的伎俩。
表达式解释:
^|;
: 字符串的开头,或者分号
\s*
: 后跟零个或多个空格
fbsr_[0-9]{4}
: 匹配 fsbr_ 和任何 4 个数字的序列
\=
:你可以只写=
,但有时你需要逃避=
(环顾四周),所以最好经常逃避一次而不是不够
[^;]+
除了分号至少一次或多次
;
: 文字分号
在哪里使用这个表达式:
function checkCookie()
{
contentDiv=document.getElementById("cookieFb");
if (/^|;\s*fbsr_[0-9]{4}\=[^;]+;/.test(document.cookie))
{//facebooker!
contentDiv.style.display="none";
return;//return here, so you can leve the else out
}
contentDiv.style.display="block";
}
嗯,应该这样做。
但是,我情不自禁,所以如果您对 JS 更加熟悉,并且想优化一些脚本,请考虑一下:
var checkCookie = (function(expr)
{
var contentDiv = document.getElementById('cookieFb');
return function()
{
contentDiv.style.display="block";
if (expr.test(document.cookie))
{
contentDiv.style.display="none";
}
};
}(/^|;\s*fbsr_[0-9]{4}\=[^;]+;/));
这是您拥有的完全相同的代码的优化版本。cookieFb
ATM,您的代码将在每次调用时向 dom 查询具有 ID 的元素,并且它也会创建 RegExp 的实例。通过使用闭包,您可以查询 DOM 一次,并创建一次 RegExp 的实例,并在每次调用时重复使用它。
在这种情况下,它的效率更高,并且进行了微优化,但我情不自禁;)