今天群里出了个题目,原题如下:
求一函数
原å—符串为
var str = "aaa/bbb/ccc/"
如果用户输入
'../dd.js'
那么返回
aaa/bbb/dd.js
如果用户输入
'../../ee.js'
那么返回
aaa/ee.js
如果用户输入
'../../../hh.js'
那么返回
hh.js
function adjustPath(str, user){
}
�外应群里童鞋处�特许情况,�需�处�一下情况
URLä¸å˜åœ¨
./
,例如:../..//xx.js
URLä¸å˜åœ¨
//
,例如:./ii.js
其实对于这题,很早以å‰?就看到过,å?ªæ˜¯ä¸€ç›´æ²¡åŽ»èŠ±æ—¶é—´ï¼Œæ£å¥½ä»Šå¤©æ—©ä¸Šé—²ç?€ï¼Œå°±å†™äº†ä¸ªï¼š
function absPath(str, user){
var sCount = 0;
var url = (user + '').replace(/\.\.\//g, function(){
sCount++;
return '';
})
.replace(/\.\//g, '');
str = (str + '').replace(/\/+$/, '');
str = str.split('/').slice(0, sCount > 0 ? -sCount : void 0).join('/');
url = str.length > 0 ? str + '/' + url : url;
return url.replace(/\/\/+/g, '/');
}
在以上代ç ?å?‘出去å?Žï¼Œç¾¤é‡Œå½±å“?å‡ ä¹Žä¸º 0 的情况下,出去å–?了æ?¯æ°´ï¼Œæƒ³åˆ°åº”该得出点奇淫技巧了,于是就å?ˆæœ‰äº†ï¼š
//MS 还是比较给力的
function absPath(str, user){
var a = document.createElement('a');
a.href = str + user;
//console.info('getAttribute, href = ', a.getAttribute('href', 4));
var urlPri = location.href.slice(0, location.href.lastIndexOf('/') + 1);
//实际�有IE7- 需� a.getAttribute('href', 4) �得�览器拼接好的URL
return (!-[1,] ? a.getAttribute('href', 4) : a.href).replace(urlPri, '');
}
测试代ç ?如下:
console.warn('test 1 - ', absPath('aaa/bbb/ccc/', '../dd.js'));
console.warn('test 2 - ', absPath('aaa/bbb/ccc/', '../../ee.js'));
console.warn('test 3 - ', absPath('aaa/bbb/ccc/', '../../../hh.js'));
console.warn('test 4 - ', absPath('aaa/bbb/ccc/', '../..//xx.js'));
console.warn('test 5 - ', absPath('aaa/bbb/ccc/', './ii.js'));
最å?Žç»™å‡ºç¾¤é‡Œ "糖果男å©" 的一个比较给力函数,ä¸?过如果需è¦?支æŒ?上é?¢è¯´çš„å‡ ä¸ªç‰¹è®¸æƒ…å†µï¼Œè¿˜å¾—æ”¹é€ ä¸€ä¸‹ï¼š
function adjustPath(str, user){
var patharr = str.replace(/\/$/,"").split("\/");
var nstr = user.replace(/\.\.\//g,function(){
patharr.pop();
return "";
});
return patharr.join("/")+"/"+nstr;
}
上一篇:ZBLOG主题[Ceedo] V2.0
下一篇:DatePicker - 基于jQuery 的日期选择控件
共0评论