文档存在指定类时设置JS Cookie失败,类匹配逻辑异常排查
问题分析与修复
你的类匹配逻辑失效主要有几个关键问题:
1. 错误使用赋值运算符而非比较运算符
代码里的if(classes = fclass)用了=(赋值),而不是===(严格相等比较)。这会把fclass的值赋给classes,导致这个条件永远为true,但如果元素没有class属性,classes会是null,赋值后会引发异常。
2. 类名匹配方式不合理
用getAttribute('class')获取类名后直接全等比较,无法处理元素有多个类的情况(比如<div class="smcx-iframe-container other-class"></div>),这种情况下类名字符串和目标类名不相等,导致匹配失败。
3. 遍历所有div效率低下
遍历页面所有div元素是没必要的,直接用jQuery选择器定位目标元素更高效。
修正后的代码
(function( $ ) { 'use strict'; function setCookie(cname,cvalue,exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays*1000*60*60*24)); var expires = "expires=" + d.toGMTString(); window.document.cookie = cname+"="+JSON.stringify(cvalue)+"; "+expires; } function getCookie(cname) { var name = cname + "="; var cArr = window.document.cookie.split(";"); for(var i=0; i<cArr.length; i++) { var c = cArr[i].trim(); if (c.indexOf(name) == 0){ return c.substring(name.length, c.length); } } return ""; } function deleteCookie(cname) { var d = new Date(); d.setTime(d.getTime() - (1000*60*60*24)); var expires = "expires=" + d.toGMTString(); window.document.cookie = cname+"="+"; "+expires; } $(document).ready(function(){ setTimeout(function(){ // 直接用jQuery选择器定位目标元素 var $targetEle = $(".smcx-iframe-container"); if($targetEle.length > 0){ var cookieval = getCookie('device-t-ban'); if( cookieval === "" ){ var fp = new Fingerprint({ canvas: true, ie_activex: true, screen_resolution: true }); var uid = fp.get(); setCookie('device-t-ban',uid,1); console.log('no cookie!'); console.log(getCookie('device-t-ban')); }else{ $targetEle.html("<div class='tryagain'><p>Try again in 24 hours!</p></div>"); console.log('yes cookie!'); console.log(getCookie('device-t-ban')); } } else { console.log('class not available'); } }, 3000); }); })( jQuery );
关键修复点说明
- 用
$(".smcx-iframe-container")直接获取目标元素,通过length判断元素是否存在,避免遍历所有div。 - 移除了错误的赋值运算符,改用元素存在性判断替代类名直接比较。
- 修复了未声明的
exist变量,改用console.log输出提示。 - 简化了
else if(cookieval != "")为else,逻辑更简洁。
内容的提问来源于stack exchange,提问作者mysticalghoul
相关产品推荐
相关产品推荐

