From a208b2a9400d94d79da7e0c5e2d8b330dce77169 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=83=91=E6=B5=A9=E4=B9=90?= <89932980@qq.com>
Date: Wed, 16 Mar 2016 15:01:44 +0800
Subject: [PATCH] =?UTF-8?q?updated=20=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
index.html | 107 ++++++++++
script/common.js | 95 +++++++++
script/relationship.js | 437 +++++++++++++++++++++++++++++++++++++++++
style/index.css | 99 ++++++++++
4 files changed, 738 insertions(+)
create mode 100644 index.html
create mode 100644 script/common.js
create mode 100644 script/relationship.js
create mode 100644 style/index.css
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