? ? ? ?今天遇到了一個(gè)坑,明明是用同樣的前端模板生成的一段html 片段大溜,同樣的 js化漆,在有的頁(yè)面能觸發(fā),在有些頁(yè)面卻沒(méi)有任何反應(yīng)钦奋。排除了一上午后才發(fā)現(xiàn)座云,是從后臺(tái)傳來(lái)的值作為 ID時(shí)有問(wèn)題,這些ID 有的是通過(guò) “_” 連接付材,而有的則是帶“.” ?的形式朦拖。 ?而js ?中這樣的形式它是不認(rèn)識(shí)的!Q嵯巍璧帝!當(dāng)然這也不能怪后臺(tái)的小哥們沒(méi)有一個(gè)統(tǒng)一的規(guī)范,總有那么些時(shí)候有那么些問(wèn)題不能避免富寿,倘若他們不方便去修改睬隶,前端的妹紙就只能在獲取值后一一判斷,把不符合規(guī)范的都統(tǒng)統(tǒng)改掉页徐。今天苏潜,我就通過(guò)幾種簡(jiǎn)單的方法將“.” ?改為“_” ?。
假設(shè)請(qǐng)求返回的json ?數(shù)據(jù)如下:
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('.','_');?
? ? ? ?}
})
? ? ? 這種方式的缺點(diǎn)時(shí)变勇,只能匹配第一個(gè)符合條件的替換恤左,就是說(shuō)qq.aa.cc 最后只能被更換為 qq_aa.cc。在有些明確的知道只有一個(gè)符號(hào)的時(shí)候這種方式能解決問(wèn)題搀绣。當(dāng)有更多的飞袋,比如qq.aa.cc ?時(shí),可以使用以下方法:
方法二:使用數(shù)組的方法:spilt('.').join("_")
n.name=n.name.split('.').join('_')
方法三:利于正則表達(dá)式
varreg=/\./g;
n.name= n.name.replace(reg,'_');
注意豌熄,由于在正則中“.” ?代表任意,如果沒(méi)有轉(zhuǎn)義將會(huì)把所有的包括字符 都替換為“_” 物咳,“ g” 表示全局锣险。