diff --git a/index.html b/index.html new file mode 100644 index 0000000..ea82acd --- /dev/null +++ b/index.html @@ -0,0 +1,107 @@ + + + + + 中国家庭称谓计算器 + + + + + +
+
+
+
+

中国家庭称谓计算器

+
+

关系:

+

+ +

+

+ + + + + + + + + + + + + + + + + + + + +

+

+ + + +

+

计算结果:

+

+ +

+
+
+
+

由于工作生活节奏不同,如今很多关系稍疏远的亲戚之间来往并不多。因此放假回家过年时,往往会搞不清楚哪位亲戚应该喊什么称呼,很是尴尬。然而搞不清亲戚关系和亲戚称谓的不仅是小孩,就连年轻一代的大人也都常常模糊混乱。

+

“中国家庭称谓计算器”为你避免了这种尴尬,只需简单的输入即可算出称谓。输入框兼容了不同的叫法,你可以称呼父亲为:“老爸”、“爹地”、“老爷子”等等,方面不同地域的习惯叫法。快捷输入按键,只需简单的点击即可完成关系输入。

+
+
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/script/common.js b/script/common.js new file mode 100644 index 0000000..139a683 --- /dev/null +++ b/script/common.js @@ -0,0 +1,95 @@ +if (typeof Array.prototype.indexOf != "function") { + Array.prototype.indexOf = function (searchElement, fromIndex) { + var index = -1; + fromIndex = fromIndex * 1 || 0; + for (var k = 0, length = this.length; k < length; k++) { + if (k >= fromIndex && this[k] === searchElement) { + index = k; + break; + } + } + return index; + }; +} + +if(!String.prototype.trim) { + String.prototype.trim = function () { + return this.replace(/^\s+|\s+$/g,''); + }; +} + +//跨浏览器DOM对象 +var DOMUtil = { + getStyle:function(node,attr){ + return node.currentStyle ? node.currentStyle[attr] : getComputedStyle(node,0)[attr]; + }, + getScroll:function(){ //获取滚动条的滚动距离 + var scrollPos={}; + if (window.pageYOffset||window.pageXOffset) { + scrollPos['top'] = window.pageYOffset; + scrollPos['left'] = window.pageXOffset; + }else if (document.compatMode && document.compatMode != 'BackCompat'){ + scrollPos['top'] = document.documentElement.scrollTop; + scrollPos['left'] = document.documentElement.scrollLeft; + }else if(document.body){ + scrollPos['top'] = document.body.scrollTop; + scrollPos['left'] = document.body.scrollLeft; + } + return scrollPos; + }, + getClient:function(){ //获取浏览器的可视区域位置 + var l,t,w,h; + l = document.documentElement.scrollLeft || document.body.scrollLeft; + t = document.documentElement.scrollTop || document.body.scrollTop; + w = document.documentElement.clientWidth; + h = document.documentElement.clientHeight; + return {'left':l,'top':t,'width':w,'height':h} ; + }, + getNextElement:function(node){ //获取下一个节点 + if(node.nextElementSibling){ + return node.nextElementSibling; + }else{ + var NextElementNode = node.nextSibling; + while(NextElementNode.nodeValue != null){ + NextElementNode = NextElementNode.nextSibling + } + return NextElementNode; + } + }, + getElementById:function(idName){ + return document.getElementById(idName); + }, + getElementsByClassName:function(className,context,tagName){ //根据class获取节点 + if(typeof context == 'string'){ + tagName = context; + context = document; + }else{ + context = context || document; + tagName = tagName || '*'; + } + if(context.getElementsByClassName){ + return context.getElementsByClassName(className); + } + var nodes = context.getElementsByTagName(tagName); + var results= []; + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var classNames = node.className.split(' '); + for (var j = 0; j < classNames.length; j++) { + if (classNames[j] == className) { + results.push(node); + break; + } + } + } + return results; + }, + addClass:function(node,classname){ //对节点增加class + if(!new RegExp("(^|\s+)"+classname).test(node.className)){ + node.className = (node.className+" "+classname).replace(/^\s+|\s+$/g,''); + } + }, + removeClass:function(node,classname){ //对节点删除class + node.className = (node.className.replace(classname,"")).replace(/^\s+|\s+$/g,''); + } +}; \ No newline at end of file diff --git a/script/relationship.js b/script/relationship.js new file mode 100644 index 0000000..19b851f --- /dev/null +++ b/script/relationship.js @@ -0,0 +1,437 @@ +(function(window){ + //简写 + var _filter = [ + {//自己是女性,女儿或儿子的妈妈是自己 + exp:/(,[mwd]|([olx]s)),[ds](&[ol])?,m/g, + str:'$1' + }, + {//自己是女性,女儿或儿子的爸爸是自己的丈夫 + exp:/(,[mwd]|([olx]s)),[ds](&[ol])?,f/g, + str:'$1,h' + }, + {//自己是男性,女儿或儿子的爸爸是自己 + exp:/(,[fhs]|([olx]b)),[ds](&[ol])?,f/g, + str:'$1' + }, + {//自己是男性,女儿或儿子的妈妈是自己的妻子 + exp:/(,[fhs]|([olx]b)),[ds](&[ol])?,m/g, + str:'$1,w' + }, + {//夫妻的孩子就是自己的孩子 + exp:/,[wh],([ds])/g, + str:',$1' + }, + {//夫妻的对方是自己 + exp:/(,w,h)|(,h,w)/g, + str:'' + }, + {//兄弟的父母就是自己的父母 + exp:/[xol][sb],([mf])/g, + str:'$1' + }, + {//母亲的丈夫是自己的父亲 + exp:/m,h/g, + str:'f', + }, + {//父亲的妻子是自己的母亲 + exp:/f,w/g, + str:'m', + }, + {//孩子的姐妹是自己的女儿 + exp:/,[ds](&[ol])?,[olx]s/g, + str:',d', + }, + {//孩子的兄弟是自己的儿子 + exp:/,[ds](&[ol])?,[olx]b/g, + str:',s', + }, + + {//如果自己是男性,兄弟姐妹的兄弟就是自己的兄弟或自己 + con:/(,[fhs]|([olx]b)),[olx][sb],[olx]b/, + exp:/^(.+),[olx][sb],[olx]b(.+)$/, + str:'$1,xb$2#$1$2', + }, + {//如果自己是女性,兄弟姐妹的兄弟就是自己的兄弟 + con:/(,[mwd]|([olx]s)),[olx][sb],[olx]b/, + exp:/,[olx][sb],[olx]b/, + str:',xb', + }, + {//如果自己是男性,兄弟姐妹的姐妹就是自己的姐妹 + con:/(,[fhs]|([olx]b)),[olx][sb],[olx]s/, + exp:/,[olx][sb],[olx]s/, + str:',xs', + }, + {//如果自己是女性,兄弟姐妹的姐妹就是自己的姐妹或自己 + con:/(,[mwd]|([olx]s)),[olx][sb],[olx]s/, + exp:/^(.+),[olx][sb],[olx]s(.+)$/, + str:'$1,xs$2#$1$2', + }, + + {//如果自己是男性,父母的儿子是自己或者兄弟 + con:/(,[fhs]|([olx]b)),[mf],s/, + exp:/^(.+),[mf],s(.+)$/, + str:'$1$2#$1,xb$2' + }, + {//如果自己是女性,父母的女儿是自己或者姐妹 + con:/(,[mwd]|([olx]s)),[mf],d/, + exp:/^(.+),[mf],d(.+)$/, + str:'$1$2#$1,xs$2' + }, + {//如果自己是女性,父母的儿子是自己或者兄弟 + con:/(,[mwd]|([olx]s)),[mf],s/, + exp:/,[mf],s/, + str:',xb' + }, + {//如果自己是男性,父母的女儿是自己或者姐妹 + con:/(,[fhs]|([olx]b)),[mf],d/, + exp:/,[mf],d/, + str:',xs' + }, + {//父母的女儿是姐妹 + exp:/^,[mf],s$/, + str:',#,xb' + }, + {//父母的女儿是自己或者姐妹 + exp:/^,[mf],d$/, + str:',#,xs' + } + ]; + + var _data = { + '':['自己'], + //外家 + 'm,m':['外婆','姥姥'], + 'm,f':['外公','姥爷'], + 'm,m,m':['太姥姥'], + 'm,m,m,h':['太姥爷'], + 'm,m,xs':['姨姥姥'], + 'm,m,xs,w':['姨姥爷'], + 'm,m,xb':['舅姥爷'], + 'm,m,xb,w':['舅姥姥'], + 'm,f,m':['太姥姥'], + 'm,f,m,h':['太姥爷'], + 'm,f,xs':['姑姥姥'], + 'm,f,xs,h':['姑姥爷'], + 'm,f,xs,s':['表舅'], + 'm,f,xb':['xx姥爷'], + 'm,f,ob':['大姥爷'], + 'm,f,lb':['小姥爷'], + //舅家 + 'm,xb':['舅舅','舅'], + 'm,xb,w':['舅妈','舅母'], + 'm,xb,s&o':['表哥(舅家)','表哥'], + 'm,xb,s&o,w':['表嫂(舅家)','表嫂'], + 'm,xb,s&l':['表弟(舅家)','表弟'], + 'm,xb,s&l,w':['表弟媳(舅家)','表弟媳'], + 'm,xb,s,s':['表侄子'], + 'm,xb,s,d':['表侄女'], + 'm,xb,d&o':['表姐(舅家)','表姐'], + 'm,xb,d&o,h':['表姐夫(舅家)','表姐夫'], + 'm,xb,d&l':['表妹(舅家)','表妹'], + 'm,xb,d&l,h':['表妹夫(舅家)','表妹夫'], + 'm,xb,d,s':['表外甥'], + 'm,xb,d,d':['表外甥女'], + 'm,ob':['大舅'], + 'm,ob,w':['大舅妈'], + 'm,lb':['小舅'], + 'm,lb,w':['小舅妈'], + //姨家 + 'm,xs':['姨妈','姨姨','姨'], + 'm,xs,h':['姨父','姨丈'], + 'm,xs,s&o':['表哥(姨家)','表哥'], + 'm,xs,s&o,w':['表嫂(姨家)','表嫂'], + 'm,xs,s&l':['表弟(姨家)','表弟'], + 'm,xs,s&l,w':['表弟媳(姨家)','表弟媳'], + 'm,xs,s,s':['表侄子'], + 'm,xs,s,d':['表侄女'], + 'm,xs,d&o':['表姐(姨家)','表姐'], + 'm,xs,d&o,h':['表姐夫(姨家)','表姐夫'], + 'm,xs,d&l':['表妹(姨家)','表妹'], + 'm,xs,d&l,h':['表妹夫(姨家)','表妹夫'], + 'm,xs,d,s':['表外甥'], + 'm,xs,d,d':['表外甥女'], + 'm,os':['大姨','大姨妈'], + 'm,os,h':['大姨父','大姨丈','大姨夫'], + 'm,ls':['小姨','小姨妈'], + 'm,ls,h':['小姨父','小姨丈','小姨夫'], + //姑家 + 'f,xs':['姑妈','姑姑','姑'], + 'f,xs,h':['姑父','姑丈'], + 'f,xs,s&o':['表哥(姑家)','表哥'], + 'f,xs,s&o,w':['表嫂(姑家)','表嫂'], + 'f,xs,s&l':['表弟(姑家)','表弟'], + 'f,xs,s&l,w':['表弟媳(姑家)','表弟媳'], + 'f,xs,s,s':['表侄子'], + 'f,xs,s,d':['表侄女'], + 'f,xs,d&o':['表姐(姑家)','表姐'], + 'f,xs,d&o,h':['表姐夫(姑家)','表姐夫'], + 'f,xs,d&l':['表妹(姑家)','表妹'], + 'f,xs,d&l,h':['表妹夫(姑家)','表妹夫'], + 'f,xs,d,s':['表外甥'], + 'f,xs,d,d':['表外甥女'], + 'f,os':['姑母'], + 'f,ls':['姑姐'], + //本家 + 'f,xb,s&o':['堂哥'], + 'f,xb,s&o,w':['堂嫂'], + 'f,xb,s&l':['堂弟'], + 'f,xb,s&l,w':['堂弟媳'], + 'f,xb,s,s':['堂侄子'], + 'f,xb,s,d':['堂侄女'], + 'f,xb,d&o':['堂姐'], + 'f,xb,d&o,h':['堂姐夫'], + 'f,xb,d&l':['堂妹'], + 'f,xb,d&l,h':['堂妹夫'], + 'f,xb,d,s':['表外甥'], + 'f,xb,d,d':['表外甥女'], + 'f,ob':['伯父','伯伯','大伯'], + 'f,ob,w':['伯母','大娘'], + 'f,lb':['叔叔','叔父','叔'], + 'f,lb,w':['婶婶','婶'], + //岳家 + 'w,m':['岳母','丈母娘'], + 'w,f':['岳父','老丈人','丈人'], + 'w,ob':['大舅哥','大舅子','内兄'], + 'w,ob,w':['嫂子','大妗子'], + 'w,lb':['小舅子','内弟'], + 'w,lb,w':['弟媳妇','小妗子'], + 'w,os':['大姨姐','妻姐'], + 'w,os,h':['大姨夫'], + 'w,ls':['小姨姐','妻妹'], + 'w,ls,h':['小姨夫'], + //婆家 + 'h,m':['婆婆'], + 'h,f':['公公'], + 'h,ob':['大伯子'], + 'h,ob,w':['大婶子','大伯娘','大嫂'], + 'h,ob,s':['侄子'], + 'h,ob,d':['侄女'], + 'h,lb':['小叔子'], + 'h,lb,w':['小婶子'], + 'h,lb,s':['侄子'], + 'h,lb,d':['侄女'], + 'h,os':['大姑子','大姑'], + 'h,os,s':['外甥'], + 'h,os,d':['外甥女'], + 'h,os,h':['大姑夫','姊丈'], + 'h,ls':['小姑子','小姑'], + 'h,ls,h':['小姑夫'], + 'h,ls,s':['外甥'], + 'h,ls,d':['外甥女'], + //内家 + 'f,f,f,f':['高祖父'], + 'f,f,f,m':['高祖母'], + 'f,f,f':['曾祖父'], + 'f,f,m':['曾祖母'], + 'f,m':['奶奶','祖母'], + 'f,f':['爷爷','祖父'], + 'f,f,f':['太爷爷'], + 'f,f,m':['太奶奶'], + 'f,f,ob':['大爷爷'], + 'f,f,ob,w':['大奶奶'], + 'f,f,lb':['小爷爷'], + 'f,f,lb,w':['小奶奶'], + 'f,f,xs':['姑奶奶'], + 'f,f,xs,h':['姑爷爷'], + 'f,m':['奶奶','祖母'], + 'f,m,f':['太爷爷'], + 'f,m,m':['太奶奶'], + 'f,m,xs':['姨爷爷','姨爷'], + 'f,m,xs,h':['姨奶奶'], + 'f,m,xb':['舅爷爷','舅爷'], + 'f,m,xb,w':['舅奶奶'], + //自家 + 'm':['妈妈','母亲','老妈','老母','娘','娘亲','妈咪'], + 'f':['爸爸','父亲','老爸','老豆','爹','爹地','老爷子'], + 'w':['老婆','妻子','太太','女人','贱内','婆娘','妻','爱人'], + 'h':['老公','丈夫','先生','男人','夫','爱人'], + 's':['儿子'], + 's,w':['儿媳妇'], + 's,s':['孙子'], + 's,s,w':['孙媳妇'], + 's,s,s':['曾孙'], + 's,s,s,s':['玄孙'], + 's,s,d':['曾孙女'], + 's,d':['孙女'], + 's,d,h':['孙女婿'], + 'd':['女儿','千金'], + 'd,h':['女婿'], + 'd,s':['外孙'], + 'd,s,w':['外孙媳'], + 'd,d':['外孙女'], + 'd,d,h':['外孙女婿'], + //旁支 + 'xb':['兄弟'], + 'xs':['姐妹'], + 'ob':['哥哥','兄'], + 'ob,w':['嫂子','嫂'], + 'ob,s':['侄子'], + 'ob,s,w':['侄媳妇'], + 'ob,d':['侄女'], + 'ob,d,h':['侄女婿'], + 'lb':['弟弟','第'], + 'lb,w':['弟妹'], + 'lb,s':['侄子'], + 'lb,s,w':['侄媳妇'], + 'lb,d':['侄女'], + 'lb,d,h':['侄女婿'], + 'os':['姐姐','姐'], + 'os,h':['姐夫'], + 'os,s':['外甥'], + 'os,d':['外甥女'], + 'ls':['妹妹','妹'], + 'ls,h':['妹夫'], + 'ls,s':['外甥'], + 'ls,d':['外甥女'], + //其他 + 's,w,m':['亲家母'], + 's,w,f':['亲家公'], + 'd,h,m':['亲家母'], + 'd,h,f':['亲家公'], + }; + + //数组去重 + var unique = function(arr) { + var result = [], hash = {}; + for (var i = 0, elem; (elem = arr[i]) != null; i++) { + if (!hash[elem]) { + result.push(elem); + hash[elem] = true; + } + } + return result; + }; + + var _attr = ''; + + //分词解析 + function getSelectors(str){ + var lists = str.split('的'); + var result = []; //所有可能性 + while(lists.length){ + var name = lists.shift(); //当前匹配词 + var arr = []; //当前匹配词可能性 + for(var i in _data){ + var value = _data[i]; + if(value.indexOf(name)>-1){ //是否存在该关系 + arr.push(i); + } + } + if(result.length){ //当前匹配词与之前可能性组合 + var res = []; + for(var i=0;i-1){ + var arr = selector.split('#'); + for(var i=0;i