码海无涯系列,写给自己的注释
解析gsb代码
// 以本站 url 来看,不需要配合使用 带查询参数的 nginx 伪静态代码:rewrite /gsb/(.*) /gsb.html?file=$1 last;
// 只需要使用 rewrite /gsb/(.*) /gsb.html last;
function getQueryString(name) {
// 从下面的用法中看出,传值字符串“id”,并连接为正则 : (^|&)id=([^&]*)(&|$)
// 该正则意思为:^: 匹配字符串的开头。|: 或的意思,表示匹配前面的或后面的。&: 匹配&符号。整体的意思是:匹配字符串的开头或者一个&符号,表示"id"参数可能出现在字符串的开头或其他参数之后。
// id=:直接匹配字符串"id="
// ([^&]*):
// (): 捕获组,用于提取匹配到的子字符串。
// []: 字符类,表示匹配中括号内的任意一个字符。
// ^: 在字符类中表示取反,即匹配除了中括号内字符的所有字符。
// &: 匹配&符号。
// *: 匹配前面的子表达式零次或多次。
// 整体的意思是:匹配0个或多个非&字符,也就是匹配"id"参数的值。
// &|$:
// &: 匹配&符号。
// |: 或的意思。
// $: 匹配字符串的结尾。
// 整体的意思是:匹配一个&符号或字符串的结尾,表示"id"参数可能是最后一个参数或后面还有其他参数
var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
console.log('reg是'+reg);
// 声明 r 是:从URL中获取的参数,并匹配上方的正则
// 从本站点的 URL来看(主域名/gsb/数字.html),该函数是没用的,因为没有参数,所以变量r是undefined或null
// 该函数适用于查找带有“id”的字符串,
var r = window.location.search.substr(1).match(reg);
console.log('r是'+r);
if (r != null) {
// unescape(),该方法解码escape()的编码,已废弃,且这里没有使用过escape编码,属实难蚌
return unescape(r[2]);
}
return null;
}
// 声明 pageId为 当前 URL 的路径名+一个空,+""实在是多余的
// 从本站点的 URL来看(主域名/gsb/数字.html),pageId是:/gsb/数字.html
var pageId = location.pathname + "";
console.log('pageId是' + pageId);
// 没用的代码
var demoId = getQueryString("id");
console.log('demoId是' + demoId);
// 没用的代码
if (demoId != null && demoId != "") {
pageId = demoId;
}
// 把 pageId 值传入本行代码,返回一个这里用了ByName, 比较少用的方法,且写法有问题,应该写成document.getElementsByName(pageId)[0].style.display = 'block';
// getElementsByName() 返回的是一个节点列表
// 如果要保留该节点的其他样式,这应写为:如果需要保留其他样式document.getElementsByName(pageId)[0].style.setProperty('display', 'block');
document.getElementsByName(pageId)[0].style.display = 'block';