$.ajax({
url:"../json/month_drop.json",
type:"get",
async:false,
dataType:'json',
beforeSend:function(){},
success:function(data){
if(data.code == 100){
if(data.content){
var opsdata = data.content;
$.each(opsdata,function(i,obj){
var reg = /^(\d{4})-(\d{2})-(\d{2})$/g;
console.log($(this)[i] == opsdata[i]);
console.log($(this)[i].orderMonth.substr(0,9).replace(reg,"$1年$2月$3日"));
// var ymd = opsdata[i].orderMonth;
// var dropdate = ymd.match(reg);
// var curdate = opsdata[i].orderMonth.substr(0,9);
// var curdate = "2016-01-23";
// var sss = opsdata[i].orderMonth.substr(0,9).replace(reg,"$1年$2月$3日");
// console.log(sss);
// console.log(dropdate);
// console.log(opsdata[i].orderMonth.substr(0,9));
// console.log(opsdata[i].cname);
// $("").appendTo("#mth-box");
});
}
}
},
error:function(data){
alert("error");
}
})
console.log($(this)[i] == opsdata[i]);// 第一次输出的是true,第二次就是false 为什么会这样?
模拟格式:
{
"code":100, "content":[ { "id":54, "orderMonth":"2016-12-29 14:33:20" }, { "id":156, "orderMonth":"2016-11-29 14:36:13" } ], "message":"成功" }var reg = /^(d{4})-(d{2})-(d{2})$/g;
测试的时候是可以的!为什么放到$.each中循环匹配就不行?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
第一种方案: 把全局的g去掉
第二种方案: 每次匹配之后,把reg.lastIndex = 0;
因为lastIndex是规定下一次匹配的起始位置
循环es6:
这样不会出现索引永远是最后一个的问题,
不过正则的问题lastIndex是正确的
你先明白$.each 里面的 this 是啥
这里的this 其实就是
$.each(opsdata,function(i,obj){}中的obj说白了就是 你 遍历的
content里面的每一个对象你又用
$(this)[i]之所有第一次是成功的 是因为$(this)把你这个对象包装了一下但是其实里面只有一个 属性,由于第一次
i的值是 0 所以是能取到值的第二次之所以是 false 是因为 这个时候
i的值是1$(this)里面只有一个属性,你用 1 肯定取不到值你直接用 obj 或者 直接用 this 不要用$去包装
你在console中执行一下面这段代码:
因为this是根据上下文执行环境来确定的,所以$(this)是指向data.content[0/1]并不是指向data.content,所以在第二次循环i=1时,实际指向的是
data.content[1][1]为underfined,所以才会报错.