今天遇到了一个坑,明明是用同样的前端模板生成的一段html 片段,同样的 js,在有的页面能触发,在有些页面却没有任何反应。排除了一上午后才发现,是从后台传来的值作为 ID时有问题,这些ID 有的是通过 “_” 连接,而有的则是带“.” 的形式。 而js 中这样的形式它是不认识的!!!当然这也不能怪后台的小哥们没有一个统一的规范,总有那么些时候有那么些问题不能避免,倘若他们不方便去修改,前端的妹纸就只能在获取值后一一判断,把不符合规范的都统统改掉。今天,我就通过几种简单的方法将“.” 改为“_” 。
假设请求返回的json 数据如下:
var json = {
"child":[
{
"name":"qq.aa.cc",
"id":1
},
{
"name":"qq.bb",
"id":2
},
{
"name":"qq.cc",
"id":3
}
]
}
方法一: replace() 方法
$.each(json.child,function(i,n) {
if(n.name.indexOf('.') >0){
n.name=n.name.replace('.','_');
}
})
这种方式的缺点时,只能匹配第一个符合条件的替换,就是说qq.aa.cc 最后只能被更换为 qq_aa.cc。在有些明确的知道只有一个符号的时候这种方式能解决问题。当有更多的,比如qq.aa.cc 时,可以使用以下方法:
方法二:使用数组的方法:spilt('.').join("_")
n.name=n.name.split('.').join('_')
方法三:利于正则表达式
varreg=/\./g;
n.name= n.name.replace(reg,'_');
注意,由于在正则中“.” 代表任意,如果没有转义将会把所有的包括字符 都替换为“_” ,“ g” 表示全局。