updated 添加target参数,更新Demo
This commit is contained in:
1 parent
a5c960f1d4
commit
b765cc30bb
7 files changed
+563
-327
No files matched your search
Vendored
+107
-46
@@ -610,7 +610,7 @@
|
|||||||
'f,m,m,xs,d,d':['再从母姑母'],
|
'f,m,m,xs,d,d':['再从母姑母'],
|
||||||
'f,m,m,xs,d,d,h':['再从母姑父'],
|
'f,m,m,xs,d,d,h':['再从母姑父'],
|
||||||
// 舅表*
|
// 舅表*
|
||||||
'f,m,xb':['舅公','舅祖父','舅老爷','舅爷爷','舅爷','舅祖','舅奶爷','太舅父','x舅公'],
|
'f,m,xb':['舅公','舅祖父','舅老爷','舅爷爷','舅爷','舅祖','舅奶爷','太舅父','x舅老爷','x舅公'],
|
||||||
'f,m,xb,w':['舅婆','舅祖母','舅奶奶','舅奶','妗婆','太舅母'],
|
'f,m,xb,w':['舅婆','舅祖母','舅奶奶','舅奶','妗婆','太舅母'],
|
||||||
// 舅表叔表
|
// 舅表叔表
|
||||||
'f,m,xb,s&o':['舅表伯父','表伯父','表伯'],
|
'f,m,xb,s&o':['舅表伯父','表伯父','表伯'],
|
||||||
@@ -1438,6 +1438,8 @@
|
|||||||
'ob':['哥哥','哥','兄','阿哥','大佬','老哥','兄长','胞哥','大哥','x哥'],
|
'ob':['哥哥','哥','兄','阿哥','大佬','老哥','兄长','胞哥','大哥','x哥'],
|
||||||
'ob,w':['嫂子','嫂','嫂嫂','阿嫂','兄嫂','大嫂','x嫂'],
|
'ob,w':['嫂子','嫂','嫂嫂','阿嫂','兄嫂','大嫂','x嫂'],
|
||||||
'ob,w,f':['兄姻父','兄眷父','姻父'],
|
'ob,w,f':['兄姻父','兄眷父','姻父'],
|
||||||
|
'ob,w,f,f':['兄姻公'],
|
||||||
|
'ob,w,f,m':['兄姻婆'],
|
||||||
'ob,w,m':['兄姻母','兄眷母','姻母'],
|
'ob,w,m':['兄姻母','兄眷母','姻母'],
|
||||||
'ob,w,ob':['兄姻兄','兄眷兄','姻兄'],
|
'ob,w,ob':['兄姻兄','兄眷兄','姻兄'],
|
||||||
'ob,w,ob,w':['兄姻兄妇','兄眷兄妇'],
|
'ob,w,ob,w':['兄姻兄妇','兄眷兄妇'],
|
||||||
@@ -1453,8 +1455,10 @@
|
|||||||
'ob,w,xs,d':['兄姻甥女','兄眷甥女'],
|
'ob,w,xs,d':['兄姻甥女','兄眷甥女'],
|
||||||
'lb':['弟弟','弟','细佬','胞弟','老弟','x弟'],
|
'lb':['弟弟','弟','细佬','胞弟','老弟','x弟'],
|
||||||
'lb,w':['弟妹','弟媳','弟媳妇','弟妇','x弟妹'],
|
'lb,w':['弟妹','弟媳','弟媳妇','弟妇','x弟妹'],
|
||||||
'lb,w,f':['弟姻父','姻父'],
|
'lb,w,f':['弟姻父','弟眷母','姻父'],
|
||||||
'lb,w,m':['弟姻母','姻母'],
|
'lb,w,f,f':['弟姻公'],
|
||||||
|
'lb,w,f,m':['弟姻婆'],
|
||||||
|
'lb,w,m':['弟姻母','弟眷母','姻母'],
|
||||||
'lb,w,ob':['弟姻兄','弟眷兄','姻兄'],
|
'lb,w,ob':['弟姻兄','弟眷兄','姻兄'],
|
||||||
'lb,w,ob,w':['弟姻兄妇','弟眷兄妇'],
|
'lb,w,ob,w':['弟姻兄妇','弟眷兄妇'],
|
||||||
'lb,w,lb':['弟姻弟','弟眷弟','姻弟'],
|
'lb,w,lb':['弟姻弟','弟眷弟','姻弟'],
|
||||||
@@ -1468,10 +1472,10 @@
|
|||||||
'lb,w,xs,s':['弟姻甥男','弟眷甥男'],
|
'lb,w,xs,s':['弟姻甥男','弟眷甥男'],
|
||||||
'lb,w,xs,d':['弟姻甥女','弟眷甥女'],
|
'lb,w,xs,d':['弟姻甥女','弟眷甥女'],
|
||||||
'xb':['兄弟'],
|
'xb':['兄弟'],
|
||||||
'xb,w,f':['姻伯父','姻世伯'],
|
'xb,w,f,ob':['姻伯父'],
|
||||||
'xb,w,f,f':['姻伯公'],
|
'xb,w,f,ob,w':['姻伯母'],
|
||||||
'xb,w,f,m':['姻伯婆'],
|
'xb,w,f,lb':['姻叔父'],
|
||||||
'xb,w,m':['姻伯母'],
|
'xb,w,f,lb,w':['姻叔母'],
|
||||||
'0,xb,w,xb,s':['舅眷舅男'],
|
'0,xb,w,xb,s':['舅眷舅男'],
|
||||||
'1,xb,w,xb,s':['叔眷舅男'],
|
'1,xb,w,xb,s':['叔眷舅男'],
|
||||||
'0,xb,w,xb,d':['舅眷舅女'],
|
'0,xb,w,xb,d':['舅眷舅女'],
|
||||||
@@ -1558,10 +1562,10 @@
|
|||||||
'ls,h,xs,s':['妹姻侄男'],
|
'ls,h,xs,s':['妹姻侄男'],
|
||||||
'ls,h,xs,d':['妹姻侄女'],
|
'ls,h,xs,d':['妹姻侄女'],
|
||||||
'xs':['姐妹','姊妹'],
|
'xs':['姐妹','姊妹'],
|
||||||
'xs,h,f':['姻伯父','姻世伯'],
|
'xs,h,f,ob':['姻伯父'],
|
||||||
'xs,h,f,f':['姻伯公'],
|
'xs,h,f,ob,w':['姻伯母'],
|
||||||
'xs,h,f,m':['姻伯婆'],
|
'xs,h,f,lb':['姻叔父'],
|
||||||
'xs,h,m':['姻伯母'],
|
'xs,h,f,lb,w':['姻叔母'],
|
||||||
'0,xs,h,xb,s':['姨姻叔男'],
|
'0,xs,h,xb,s':['姨姻叔男'],
|
||||||
'1,xs,h,xb,s':['姑姻叔男'],
|
'1,xs,h,xb,s':['姑姻叔男'],
|
||||||
'0,xs,h,xb,d':['姨姻叔女'],
|
'0,xs,h,xb,d':['姨姻叔女'],
|
||||||
@@ -1767,17 +1771,26 @@
|
|||||||
'd,h,xs,d':['女息姻外孙女','息姻外孙女'],
|
'd,h,xs,d':['女息姻外孙女','息姻外孙女'],
|
||||||
};
|
};
|
||||||
|
|
||||||
//数组去重
|
// 数组去重
|
||||||
var unique = function(arr) {
|
var unique = function(arr) {
|
||||||
var result = [], hash = {};
|
var result = [], hash = {};
|
||||||
var item;
|
var item;
|
||||||
for (var i = 0; (item = arr[i]) != null; i++) {
|
for (var i = 0; (item = arr[i]) != null; i++) {
|
||||||
var temp = item.replace(/[ol](?=s|b)/,'x').replace(/&[ol]/,''); //对特殊语法标识相互包含的行为去重
|
var temp = item.replace(/[ol](?=s|b)/,'x').replace(/&[ol]/,''); //对特殊语法标识相互包含的行为去重
|
||||||
if (!hash[item]&&!hash[temp]){
|
if (temp==item&&!hash[temp]){
|
||||||
result.push(item);
|
|
||||||
hash[item] = true;
|
hash[item] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (var i = 0; (item = arr[i]) != null; i++) {
|
||||||
|
var temp = item.replace(/[ol](?=s|b)/,'x').replace(/&[ol]/,''); //对特殊语法标识相互包含的行为去重
|
||||||
|
if (temp!=item){
|
||||||
|
if(!hash[temp]){
|
||||||
|
result.push(item);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
result.push(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1820,7 +1833,7 @@
|
|||||||
return match?result:[];
|
return match?result:[];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 简化选择器
|
// 选择器转ID
|
||||||
function selector2id(selector,sex){
|
function selector2id(selector,sex){
|
||||||
var result = [];
|
var result = [];
|
||||||
var hash = {};
|
var hash = {};
|
||||||
@@ -1872,7 +1885,7 @@
|
|||||||
return unique(result);
|
return unique(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取数据
|
// 通过ID获取数据
|
||||||
function getDataById(id){
|
function getDataById(id){
|
||||||
var items = [];
|
var items = [];
|
||||||
var getData = function(d){
|
var getData = function(d){
|
||||||
@@ -1918,7 +1931,7 @@
|
|||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
//逆转ID
|
// 逆转ID
|
||||||
function reverseId(id,sex){
|
function reverseId(id,sex){
|
||||||
var hash = {
|
var hash = {
|
||||||
f:['d','s'],
|
f:['d','s'],
|
||||||
@@ -1956,7 +1969,7 @@
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取关系链条
|
// 通过ID获取关系链条
|
||||||
function getChainById(id){
|
function getChainById(id){
|
||||||
var arr = id.split(',');
|
var arr = id.split(',');
|
||||||
var items = [];
|
var items = [];
|
||||||
@@ -1967,45 +1980,93 @@
|
|||||||
return items.join('的');
|
return items.join('的');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 合并选择器,查找两个对象之间的关系
|
||||||
|
function mergeSelector(from,to){
|
||||||
|
var Index = 0;
|
||||||
|
var from_arr = from.split(',');
|
||||||
|
var to_arr = to.split(',');
|
||||||
|
for(var i=0;i<from_arr.length&&i<to_arr.length;i++){
|
||||||
|
if(from_arr[i]!=to_arr[i]){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var mid_sex = 0;
|
||||||
|
if(to_arr[i-1].match(/([fhs1](&[ol])?|[olx]b)$/)){
|
||||||
|
mid_sex=1;
|
||||||
|
}
|
||||||
|
var sex = -1;
|
||||||
|
if(to){
|
||||||
|
if(to.match(/,([fhs1](&[ol])?|[olx]b)$/)){
|
||||||
|
sex=1;
|
||||||
|
}else{
|
||||||
|
sex=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(i){
|
||||||
|
var from_sub = from_arr.slice(i).join(',');
|
||||||
|
var to_sub = to_arr.slice(i).join(',');
|
||||||
|
return {
|
||||||
|
'selector':(to_sub?','+reverseId(to_sub,mid_sex):'')+(from_sub?','+from_sub:''),
|
||||||
|
'sex':sex
|
||||||
|
};
|
||||||
|
}else{
|
||||||
|
return {
|
||||||
|
'selector':from,
|
||||||
|
'sex':sex
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (function (parameter){
|
return (function (parameter){
|
||||||
var options = Object.assign({
|
var options = Object.assign({
|
||||||
text:'',
|
text:'',
|
||||||
|
target:'',
|
||||||
sex:-1,
|
sex:-1,
|
||||||
type:'default', //为'chain'时,reverse无效
|
type:'default', //为'chain'时,reverse无效
|
||||||
reverse:false
|
reverse:false
|
||||||
},parameter);
|
},parameter);
|
||||||
var selectors = getSelectors(options.text);
|
var sex = options.sex;
|
||||||
// console.log('[selectors]',selectors);
|
var from_selectors = getSelectors(options.text);
|
||||||
|
var to_selectors = options.target?getSelectors(options.target):[''];
|
||||||
|
// console.log('[selectors]',from_selectors,to_selectors);
|
||||||
var result = []; //匹配结果
|
var result = []; //匹配结果
|
||||||
for(var i = 0;i<selectors.length;i++){ //遍历所有可能性
|
from_selectors.forEach(function(from){
|
||||||
var ids = selector2id(selectors[i],options.sex);
|
to_selectors.forEach(function(to){
|
||||||
// console.log('[ids]',ids);
|
var data = mergeSelector(from,to);
|
||||||
for(var j=0;j<ids.length;j++){
|
// console.log('#data#',data);
|
||||||
var id = ids[j];
|
sex = data['sex']>-1?data['sex']:options.sex;
|
||||||
if(options.type=='chain'){
|
var ids = selector2id(data['selector'],sex);
|
||||||
var item = getChainById(id);
|
// console.log('[ids]',ids);
|
||||||
if(item){
|
for(var j=0;j<ids.length;j++){
|
||||||
result.push(item);
|
var id = ids[j];
|
||||||
}
|
if(options.type=='chain'){
|
||||||
}else{
|
if(options.reverse){
|
||||||
if(options.reverse){
|
id = reverseId(id,sex);
|
||||||
id = reverseId(id,options.sex);
|
}
|
||||||
}
|
var item = getChainById(id);
|
||||||
var items = getDataById(options.sex+','+id);
|
if(item){
|
||||||
if(!items.length){
|
result.push(item);
|
||||||
items = getDataById(id);
|
}
|
||||||
}
|
}else{
|
||||||
if(!items.length){
|
if(options.reverse){
|
||||||
if(id.indexOf('w')==0||id.indexOf('h')==0){ //找不到关系,随爱人叫
|
id = reverseId(id,sex);
|
||||||
items = getDataById(id.substr(2));
|
}
|
||||||
|
var items = getDataById(sex+','+id);
|
||||||
|
if(!items.length){
|
||||||
|
items = getDataById(id);
|
||||||
|
}
|
||||||
|
if(!items.length){
|
||||||
|
if(id.indexOf('w')==0||id.indexOf('h')==0){ //找不到关系,随爱人叫
|
||||||
|
items = getDataById(id.substr(2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(items.length){
|
||||||
|
result = result.concat(items);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(items.length){
|
|
||||||
result = result.concat(items);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
});
|
||||||
return unique(result);
|
return unique(result);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
Vendored
+2
-2
@@ -1,2 +1,2 @@
|
|||||||
!function(s,f){"object"==typeof module&&module.exports?module.exports=f():s.relationship=f()}("undefined"!=typeof window?window:this,function(){function s(s){s=s.replace(/[二|三|四|五|六|七|八|九|十]{1,2}/g,"x");for(var f=s.replace(/我的?/,"").replace(/家的?/,"的").split("的"),x=[],d=!0;f.length;){var m=f.shift(),b=[],h=!1;for(var l in w){var o=w[l];o.indexOf(m)>-1&&(!l&&f.length||b.push(l),h=!0)}if(h||(d=!1),x.length){for(var e=[],l=0;l<x.length;l++)for(var r=0;r<b.length;r++)e.push(x[l]+","+b[r]);x=e}else for(var l=0;l<b.length;l++)x.push(","+b[l])}return d?x:[]}function f(s,f){var x=[],d={};if(f<0?0==s.indexOf(",w")?s=",1"+s:0==s.indexOf(",h")&&(s=",0"+s):0==s.indexOf(",1")||0==s.indexOf(",0")||f>-1&&(s=","+f+s),s.match(/,[w0],w|,[h1],h/))return!1;var m=function(s){var f="";if(!d[s]){d[s]=!0;var w=!0;do{f=s;for(var h in b){var l=b[h];if(s=s.replace(l.exp,l.str),s.indexOf("#")>-1){for(var o=s.split("#"),e=0;e<o.length;e++)m(o[e]);w=!1;break}}}while(f!=s);if(w){if(s.match(/,[w0],w|,[h1],h/))return!1;s=s.replace(/,[01]/,"").substr(1),x.push(s)}}};return m(s),h(x)}function x(s){var f=[],x=function(s){var f=[];for(var x in w)if(x.replace(/&[ol]/g,"")==s)f.push(w[x][0]);else for(var d=s;d.match(/[ol](b|s)/);)if(d=d.replace(/[ol](b|s)/,"x$1"),d==x){f.push(w[x][0]);break}return f};if(w[s])f.push(w[s][0]);else if(f=x(s),f.length||(s=s.replace(/&[ol]/g,""),f=x(s)),f.length||(s=s.replace(/[ol](b|s)/g,"x$1"),f=x(s)),!f.length){var d=s.replace(/x/g,"l");f=x(d);var m=s.replace(/x/g,"o");f=f.concat(x(m))}return f}function d(s,f){var x={f:["d","s"],m:["d","s"],h:["w",""],w:["","h"],s:["m","f"],d:["m","f"],lb:["os","ob"],ob:["ls","lb"],xb:["xs","xb"],ls:["os","ob"],os:["ls","lb"],xs:["xs","xb"]},d="";if(s.indexOf("&o")>-1?d="&l":s.indexOf("&l")>-1&&(d="&o"),s){s=s.replace(/&[ol]/g,""),f=f?1:0;var m=(","+f+","+s).replace(/,[fhs]|,[olx]b/g,",1").replace(/,[mwd]|,[olx]s/g,",0");m=m.substring(0,m.lastIndexOf(","));for(var b=s.split(",").reverse(),w=m.split(",").reverse(),h=[],l=0;l<b.length;l++)h.push(x[b[l]][w[l]]);return h.join(",")+d}return""}function m(s){for(var f=s.split(","),x=[],d=0;d<f.length;d++){var m=f[d].replace(/&[ol]/,"");x.push(w[m][0])}return x.join("的")}var b=[{exp:/^(.+)&o([^#]+)&l/g,str:"$1$2"},{exp:/^(.+)&l([^#]+)&o/g,str:"$1$2"},{exp:/(,[ds],(.+),[ds])&[ol]/g,str:"$1"},{exp:/(,o[sb])+(,o[sb])/,str:"$2"},{exp:/(,l[sb])+(,l[sb])/,str:"$2"},{exp:/^(.*)(,[fh1])(,[olx][sb])+,[olx]b(.*)$/,str:"$1$2,xb$4#$1$2$4"},{exp:/^(.*)(,[mw0])(,[olx][sb])+,[olx]s(.*)$/,str:"$1$2,xs$4#$1$2$4"},{exp:/(,[fh1])(,[olx][sb])+,[olx]s/g,str:"$1,xs"},{exp:/(,[mw0])(,[olx][sb])+,[olx]b/g,str:"$1,xb"},{exp:/^,[olx][sb],[olx]b(.+)?$/,str:"$1#,xb$1"},{exp:/^,[olx][sb],[olx]s(.+)?$/,str:"$1#,xs$1"},{exp:/^,x([sb])$/,str:",o$1#,l$1"},{exp:/m,h/g,str:"f"},{exp:/f,w/g,str:"m"},{exp:/,[xol][sb](,[mf])/g,str:"$1"},{exp:/,[mf],d&([ol])/,str:",$1s"},{exp:/,[mf],s&([ol])/,str:",$1b"},{exp:/^(.*)(,[fh1]|[xol]b),[mf],s(.*)$/,str:"$1$2,xb$3#$1$2$3"},{exp:/^(.*)(,[mw0]|[xol]s),[mf],d(.*)$/,str:"$1$2,xs$3#$1$2$3"},{exp:/(,[mw0]|[xol]s),[mf],s/,str:"$1,xb"},{exp:/(,[fh1]|[xol]b),[mf],d/,str:"$1,xs"},{exp:/^,[mf],s(.+)?$/,str:",1$1#,xb$1"},{exp:/^,[mf],d(.+)?$/,str:",0$1#,xs$1"},{exp:/,[ds]&o,ob/g,str:",s&o"},{exp:/,[ds]&o,os/g,str:",d&o"},{exp:/,[ds]&l,lb/g,str:",s&l"},{exp:/,[ds]&l,ls/g,str:",d&l"},{exp:/,[ds](&[ol])?,[olx]s/g,str:",d"},{exp:/,[ds](&[ol])?,[olx]b/g,str:",s"},{exp:/(,[mwd0](&[ol])?|[olx]s),[ds](&[ol])?,m/g,str:"$1"},{exp:/(,[mwd0](&[ol])?|[olx]s),[ds](&[ol])?,f/g,str:"$1,h"},{exp:/(,[fhs1](&[ol])?|[olx]b),[ds](&[ol])?,f/g,str:"$1"},{exp:/(,[fhs1](&[ol])?|[olx]b),[ds](&[ol])?,m/g,str:"$1,w"},{exp:/^,[ds],m(.+)?$/,str:"$1#,w$1"},{exp:/^,[ds],f(.+)?$/,str:"$1#,h$1"},{exp:/,[wh](,[ds])/g,str:"$1"},{exp:/,w,h|,h,w/g,str:""},{exp:/(.+)?\[([^\|]+?)\|([^\[\]]+?\|[^\[\]]+?)?\](.+)?/g,str:"$1$2$4#$1[$3]$4"},{exp:/(.+)?\[([^\[\]\|]+?)\|([^\[\]\|]+?)?\](.+)?/g,str:"$1$2$4#$1$3$4"}],w={"":["自己","我","本人","在下"],"[f,f|f,m|m,f|m,m]":["祖辈","祖父母"],"[f|m]":["父母","爹娘","爹妈","爸妈","双亲","二亲","两亲","二老","高堂"],"[h,f|h,m]":["公婆"],"[w,f|w,m]":["岳父母"],"[xb|xs]":["兄弟姐妹","同胞","手足"],"[f,xb,s&o|f,xb,s&l]":["堂兄弟"],"[f,xb,d&o|f,xb,d&l]":["堂姐妹","堂姊妹"],"[f,xs,s&o|f,xs,s&l|m,xb,s&o|m,xb,s&l]":["表兄弟"],"[f,xs,d&o|f,xs,d&l|m,xb,d&o|m,xb,d&l]":["表姐妹","表姊妹"],"[s|d]":["子女","儿女","小孩","孩子","孩儿","宝宝","娃"],"[s,s|s,d|d,s|d,d]":["孙辈"],f:["爸爸","父亲","阿爸","老爸","老窦","爸","父","爹","爹爹","爹地","爹啲","老爹","大大","老爷子"],"f,f":["爷爷","祖父","阿爷","奶爷","阿公","老爷"],"f,f,f":["曾祖父","曾祖","太爷","太爷爷","太公","祖公","祖奶爷","太老爷"],"f,f,f,f":["高祖父","老太奶爷","老太爷","祖太爷","祖太爷爷","祖太公","高王父"],"f,f,f,f,f":["天祖父","高祖"],"f,f,f,f,f,f":["烈祖父","烈祖"],"f,f,f,f,f,f,f":["太祖父","太祖Line truncated
|
!function(s,f){"object"==typeof module&&module.exports?module.exports=f():s.relationship=f()}("undefined"!=typeof window?window:this,function(){function s(s){s=s.replace(/[二|三|四|五|六|七|八|九|十]{1,2}/g,"x");for(var f=s.replace(/我的?/,"").replace(/家的?/,"的").split("的"),x=[],d=!0;f.length;){var m=f.shift(),b=[],w=!1;for(var l in h){var o=h[l];o.indexOf(m)>-1&&(!l&&f.length||b.push(l),w=!0)}if(w||(d=!1),x.length){for(var e=[],l=0;l<x.length;l++)for(var r=0;r<b.length;r++)e.push(x[l]+","+b[r]);x=e}else for(var l=0;l<b.length;l++)x.push(","+b[l])}return d?x:[]}function f(s,f){var x=[],d={};if(f<0?0==s.indexOf(",w")?s=",1"+s:0==s.indexOf(",h")&&(s=",0"+s):0==s.indexOf(",1")||0==s.indexOf(",0")||f>-1&&(s=","+f+s),s.match(/,[w0],w|,[h1],h/))return!1;var m=function(s){var f="";if(!d[s]){d[s]=!0;var b=!0;do{f=s;for(var h in w){var l=w[h];if(s=s.replace(l.exp,l.str),s.indexOf("#")>-1){for(var o=s.split("#"),e=0;e<o.length;e++)m(o[e]);b=!1;break}}}while(f!=s);if(b){if(s.match(/,[w0],w|,[h1],h/))return!1;s=s.replace(/,[01]/,"").substr(1),x.push(s)}}};return m(s),l(x)}function x(s){var f=[],x=function(s){var f=[];for(var x in h)if(x.replace(/&[ol]/g,"")==s)f.push(h[x][0]);else for(var d=s;d.match(/[ol](b|s)/);)if(d=d.replace(/[ol](b|s)/,"x$1"),d==x){f.push(h[x][0]);break}return f};if(h[s])f.push(h[s][0]);else if(f=x(s),f.length||(s=s.replace(/&[ol]/g,""),f=x(s)),f.length||(s=s.replace(/[ol](b|s)/g,"x$1"),f=x(s)),!f.length){var d=s.replace(/x/g,"l");f=x(d);var m=s.replace(/x/g,"o");f=f.concat(x(m))}return f}function d(s,f){var x={f:["d","s"],m:["d","s"],h:["w",""],w:["","h"],s:["m","f"],d:["m","f"],lb:["os","ob"],ob:["ls","lb"],xb:["xs","xb"],ls:["os","ob"],os:["ls","lb"],xs:["xs","xb"]},d="";if(s.indexOf("&o")>-1?d="&l":s.indexOf("&l")>-1&&(d="&o"),s){s=s.replace(/&[ol]/g,""),f=f?1:0;var m=(","+f+","+s).replace(/,[fhs]|,[olx]b/g,",1").replace(/,[mwd]|,[olx]s/g,",0");m=m.substring(0,m.lastIndexOf(","));for(var b=s.split(",").reverse(),w=m.split(",").reverse(),h=[],l=0;l<b.length;l++)h.push(x[b[l]][w[l]]);return h.join(",")+d}return""}function m(s){for(var f=s.split(","),x=[],d=0;d<f.length;d++){var m=f[d].replace(/&[ol]/,"");x.push(h[m][0])}return x.join("的")}function b(s,f){for(var x=s.split(","),m=f.split(","),b=0;b<x.length&&b<m.length&&x[b]==m[b];b++);var w=0;m[b-1].match(/([fhs1](&[ol])?|[olx]b)$/)&&(w=1);var h=-1;if(f&&(h=f.match(/,([fhs1](&[ol])?|[olx]b)$/)?1:0),b){var l=x.slice(b).join(","),o=m.slice(b).join(",");return{selector:(o?","+d(o,w):"")+(l?","+l:""),sex:h}}return{selector:s,sex:h}}var w=[{exp:/^(.+)&o([^#]+)&l/g,str:"$1$2"},{exp:/^(.+)&l([^#]+)&o/g,str:"$1$2"},{exp:/(,[ds],(.+),[ds])&[ol]/g,str:"$1"},{exp:/(,o[sb])+(,o[sb])/,str:"$2"},{exp:/(,l[sb])+(,l[sb])/,str:"$2"},{exp:/^(.*)(,[fh1])(,[olx][sb])+,[olx]b(.*)$/,str:"$1$2,xb$4#$1$2$4"},{exp:/^(.*)(,[mw0])(,[olx][sb])+,[olx]s(.*)$/,str:"$1$2,xs$4#$1$2$4"},{exp:/(,[fh1])(,[olx][sb])+,[olx]s/g,str:"$1,xs"},{exp:/(,[mw0])(,[olx][sb])+,[olx]b/g,str:"$1,xb"},{exp:/^,[olx][sb],[olx]b(.+)?$/,str:"$1#,xb$1"},{exp:/^,[olx][sb],[olx]s(.+)?$/,str:"$1#,xs$1"},{exp:/^,x([sb])$/,str:",o$1#,l$1"},{exp:/m,h/g,str:"f"},{exp:/f,w/g,str:"m"},{exp:/,[xol][sb](,[mf])/g,str:"$1"},{exp:/,[mf],d&([ol])/,str:",$1s"},{exp:/,[mf],s&([ol])/,str:",$1b"},{exp:/^(.*)(,[fh1]|[xol]b),[mf],s(.*)$/,str:"$1$2,xb$3#$1$2$3"},{exp:/^(.*)(,[mw0]|[xol]s),[mf],d(.*)$/,str:"$1$2,xs$3#$1$2$3"},{exp:/(,[mw0]|[xol]s),[mf],s/,str:"$1,xb"},{exp:/(,[fh1]|[xol]b),[mf],d/,str:"$1,xs"},{exp:/^,[mf],s(.+)?$/,str:",1$1#,xb$1"},{exp:/^,[mf],d(.+)?$/,str:",0$1#,xs$1"},{exp:/,[ds]&o,ob/g,str:",s&o"},{exp:/,[ds]&o,os/g,str:",d&o"},{exp:/,[ds]&l,lb/g,str:",s&l"},{exp:/,[ds]&l,ls/g,str:",d&l"},{exp:/,[ds](&[ol])?,[olx]s/g,str:",d"},{exp:/,[ds](&[ol])?,[olx]b/g,str:",s"},{exp:/(,[mwd0](&[ol])?|[olx]s),[ds](&[ol])?,m/g,str:"$1"},{exp:/(,[mwd0](&[ol])?|[olx]s),[ds](&[ol])?,f/g,str:"$1,h"},{exp:/(,[fhs1](&[ol])?|[olx]b),[ds](&[ol])?,f/g,str:"$1"},{exp:/(,[fhs1](&[ol])?|[olx]b),[ds](&[ol])?,m/g,str:"$1,w"},{exp:/^,[ds],m(.+)?$/,str:"$1#,w$1"},{exp:/^,[ds],f(.+)?$/,str:"$1#,h$1"},{exp:/,[wh](,[ds])/g,str:"$1"},{exp:/,w,h|,h,w/g,str:""},{exp:/(.+)?\[([^\|]+?)\|([^\[\]]+?\|[^\[\]]+?)?\](.+)?/g,str:"$1$2$4#$1[$3]$4"},{exp:/(.+)?\[([^\[\]\|]+?)\|([^\[\]\|]+?)?\](.+)?/g,str:"$1$2$4#$1$3$4"}],h={"":["自己","我","本人","在下"],"[f,f|f,m|m,f|m,m]":["祖辈","祖父母"],"[f|m]":["父母","爹娘","爹妈","爸妈","双亲","二亲","两亲","二老","高堂"],"[h,f|h,m]":["公婆"],"[w,f|w,m]":["岳父母"],"[xb|xs]":["兄弟姐妹","同胞","手足"],"[f,xb,s&o|f,xb,s&l]":["堂兄弟"],"[f,xb,d&o|f,xb,d&l]":["堂姐妹","堂姊妹"],"[f,xs,s&o|f,xs,s&l|m,xb,s&o|m,xb,s&l]":["表兄弟"],"[f,xs,d&o|f,xs,d&l|m,xb,d&o|m,xb,d&l]":["表姐妹","表姊妹"],"[s|d]":["子女","儿女","小孩","孩子","孩儿","宝宝","娃"],"[s,s|s,d|d,s|d,d]":["孙辈"],f:["爸爸","父亲","阿爸","老爸","老窦","爸","父","爹","爹爹","爹地","爹啲","老爹","大大","老爷子"],"f,f":["爷爷","祖Line truncated
|
||||||
"m,xs,h,f":["姨姻祖父","姻爷爷"],"m,xs,h,m":["姨姻祖母","姻奶奶"],"m,xs,h,ob":["姨姻伯父","姻伯父","姻世伯"],"m,xs,h,ob,w":["姨姻伯母","姻伯母"],"m,xs,h,lb":["姨姻叔父","姻叔父"],"m,xs,h,lb,w":["姨姻叔母","姻叔母"],"m,xs,h,xs":["姨姻姑母","姻姑母"],"m,xs,h,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,s,w":["姨侄妇","从母侄妇"],"m,xs,s,s,s":["姨侄孙男","姨侄孙","从母侄孙"],"m,xs,s,s,s,w":["姨侄孙妇","从母侄孙妇"],"m,xs,s,s,d":["姨侄孙女","从母侄孙女"],"m,xs,s,s,d,h":["姨侄孙婿","从母侄孙婿"],"m,xs,s,d":["姨侄女","从母侄女","姨侄"],"m,xs,s,d,h":["姨侄婿","从母侄婿"],"m,xs,s,d,s":["姨侄外孙男","姨侄外孙","从母侄外孙"],"m,xs,s,d,s,w":["姨侄外孙妇","从母侄外孙妇"],"m,xs,s,d,d":["姨侄外孙女","从母侄外孙女"],"m,xs,s,d,d,h":["姨侄外孙婿","从母侄外孙婿"],"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,s,w":["姨甥妇","从母甥妇"],"m,xs,d,s,s":["姨甥孙男","姨甥孙","从母甥孙"],"m,xs,d,s,s,w":["姨甥孙妇","从母甥孙妇"],"m,xs,d,s,d":["姨甥孙女","从母甥孙女"],"m,xs,d,s,d,h":["姨甥孙婿","从母甥孙婿"],"m,xs,d,d":["姨甥女","从母甥女","姨外甥女","姨甥"],"m,xs,d,d,h":["姨甥婿","从母甥婿"],"m,xs,d,d,s":["姨甥外孙男","姨甥外孙","从母甥外孙"],"m,xs,d,d,s,w":["姨甥外孙妇","从母甥外孙妇"],"m,xs,d,d,d":["姨甥外孙女","从母甥外孙女"],"m,xs,d,d,d,h":["姨甥外孙婿","从母甥外孙婿"],h:["老公","丈夫","先生","官人","男人","汉子","夫","夫君","相公","夫婿","良人","爱人","老伴","老头子"],"h,f":["公公","翁亲","老公公"],"h,f,f":["祖公","祖翁","奶公父"],"h,f,f,f":["曾祖公","太公翁"],"h,f,f,f,ob":["伯曾祖公","太伯翁"],"h,f,f,f,ob,w":["伯曾祖婆","太姆婆"],"h,f,f,f,lb":["叔曾祖公","太叔翁"],"h,f,f,f,lb,w":["叔曾祖婆","太婶婆"],"h,f,f,m":["曾祖婆","太奶亲"],"h,f,f,ob":["伯祖公","伯祖翁"],"h,f,f,ob,w":["伯祖婆"],"h,f,f,lb":["叔祖公","叔祖翁"],"h,f,f,lb,w":["叔祖婆"],"h,f,f,xb,s&o":["堂伯老爷"],"h,f,f,xb,s&o,w":["堂伯奶奶"],"h,f,f,xb,s&l":["堂叔老爷"],"h,f,f,xb,s&l,w":["堂叔奶奶"],"h,f,f,xb,s,s&o":["从堂大伯"],"h,f,f,xb,s,s&o,w":["从堂嫂"],"h,f,f,xb,s,s&l":["从堂叔仔"],"h,f,f,xb,s,s&l,w":["从堂弟媳"],"h,f,f,xb,s,d&o":["从堂大姑"],"h,f,f,xb,s,d&o,h":["从堂大姑夫"],"h,f,f,xb,s,d&l":["从堂小姑"],"h,f,f,xb,s,d&l,h":["从堂小姑夫"],"h,f,f,xb,d":["堂姑奶奶"],"h,f,f,xb,d,h":["堂姑老爷"],"h,f,f,xb,d,d&o":["堂姑表大姑"],"h,f,f,xb,d,d&o,h":["堂姑表大姑夫"],"h,f,f,xb,d,d&l":["堂姑表小姑"],"h,f,f,xb,d,d&l,h":["堂姑表小姑夫"],"h,f,f,xs":["姑祖婆"],"h,f,f,xs,h":["姑祖公"],"h,f,m":["祖婆","奶婆母"],"h,f,m,f":["曾外祖公"],"h,f,m,m":["曾外祖婆"],"h,f,m,xb":["舅祖公"],"h,f,m,xb,w":["舅祖婆"],"h,f,m,xs":["姨祖婆"],"h,f,m,xs,h":["姨祖公"],"h,f,ob":["伯公父","伯翁"],"h,f,ob,w":["伯婆母","伯婆"],"h,f,lb":["叔公父","叔公","叔翁","叔祖"],"h,f,lb,w":["叔婆母","叔婆","婶婆","婶亲"],"h,f,xb,s&o":["堂大伯子","从父大伯子","从父大伯兄","堂大伯","从父大伯","夫从兄"],"h,f,xb,s&o,w":["堂大伯嫂","从父大伯嫂","堂大姆","从父大姆","从兄嫂"],"h,f,xb,s&l":["堂小叔弟","从父小叔弟","堂叔仔","从父叔仔","夫从弟"],"h,f,xb,s&l,w":["堂小叔弟妇","从父小叔弟妇","堂小弟","从父小弟","从弟妇"],"h,f,xb,s,s":["堂夫侄男","从父夫侄男"],"h,f,xb,s,d":["堂夫侄女","从父夫侄女"],"h,f,xb,d&o":["堂大姑姐","从父大姑姐","从父大姑姊"],"h,f,xb,d&o,h":["堂大姑姐夫","从父大姑姐夫","从父大姑姊夫"],"h,f,xb,d&l":["堂小姑妹","从父小姑妹"],"h,f,xb,d&l,h":["堂小姑妹夫","从父小姑妹夫"],"h,f,xb,d,s":["堂夫甥男","从父夫甥男"],"h,f,xb,d,d":["堂夫甥女","从父夫甥女"],"h,f,xs":["姑婆母","姑婆"],"h,f,xs,h":["姑公父","姑公"],"h,f,xs,s&o":["姑表大伯子","姑表大伯兄","表大伯"],"h,f,xs,s&o,w":["姑表大伯嫂","表大姆"],"h,f,xs,s&l":["姑表小叔弟","表叔仔"],"h,f,xs,s&l,w":["姑表小叔弟妇","表小弟"],"h,f,xs,s,s":["姑表夫侄男"],"h,f,xs,s,d":["姑表夫侄女"],"h,f,xs,d&o":["姑表大姑姐","姑表大姑姊","表大姑"],"h,f,xs,d&o,h":["姑表大姑姐夫","姑表大姑姊夫"],"h,f,xs,d&l":["姑Line truncated
|
"m,xb,d,d,h":["舅表甥婿"],"m,xb,d,d,s":["舅表甥外孙男","表甥外孙男"],"m,xb,d,d,d":["舅表甥外孙女","表甥外孙女"],"m,ob":["大舅"],"m,ob,w":["大舅妈"],"m,lb":["小舅","舅父仔"],"m,lb,w":["小舅妈"],"m,os":["大姨","大姨妈"],"m,os,h":["大姨父","大姨丈"],"m,ls":["小姨","小姨妈","姨仔"],"m,ls,h":["小姨父","小姨丈"],"m,xs":["姨妈","姨母","姨姨","姨娘","阿姨","姨","x姨","x姨妈"],"m,xs,h":["姨丈","姨父","姨爸","姨爹","姨婿","姨郎","x姨丈","x姨父"],"m,xs,h,f":["姨姻祖父","姻爷爷"],"m,xs,h,m":["姨姻祖母","姻奶奶"],"m,xs,h,ob":["姨姻伯父","姻伯父","姻世伯"],"m,xs,h,ob,w":["姨姻伯母","姻伯母"],"m,xs,h,lb":["姨姻叔父","姻叔父"],"m,xs,h,lb,w":["姨姻叔母","姻叔母"],"m,xs,h,xs":["姨姻姑母","姻姑母"],"m,xs,h,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,s,w":["姨侄妇","从母侄妇"],"m,xs,s,s,s":["姨侄孙男","姨侄孙","从母侄孙"],"m,xs,s,s,s,w":["姨侄孙妇","从母侄孙妇"],"m,xs,s,s,d":["姨侄孙女","从母侄孙女"],"m,xs,s,s,d,h":["姨侄孙婿","从母侄孙婿"],"m,xs,s,d":["姨侄女","从母侄女","姨侄"],"m,xs,s,d,h":["姨侄婿","从母侄婿"],"m,xs,s,d,s":["姨侄外孙男","姨侄外孙","从母侄外孙"],"m,xs,s,d,s,w":["姨侄外孙妇","从母侄外孙妇"],"m,xs,s,d,d":["姨侄外孙女","从母侄外孙女"],"m,xs,s,d,d,h":["姨侄外孙婿","从母侄外孙婿"],"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,s,w":["姨甥妇","从母甥妇"],"m,xs,d,s,s":["姨甥孙男","姨甥孙","从母甥孙"],"m,xs,d,s,s,w":["姨甥孙妇","从母甥孙妇"],"m,xs,d,s,d":["姨甥孙女","从母甥孙女"],"m,xs,d,s,d,h":["姨甥孙婿","从母甥孙婿"],"m,xs,d,d":["姨甥女","从母甥女","姨外甥女","姨甥"],"m,xs,d,d,h":["姨甥婿","从母甥婿"],"m,xs,d,d,s":["姨甥外孙男","姨甥外孙","从母甥外孙"],"m,xs,d,d,s,w":["姨甥外孙妇","从母甥外孙妇"],"m,xs,d,d,d":["姨甥外孙女","从母甥外孙女"],"m,xs,d,d,d,h":["姨甥外孙婿","从母甥外孙婿"],h:["老公","丈夫","先生","官人","男人","汉子","夫","夫君","相公","夫婿","良人","爱人","老伴","老头子"],"h,f":["公公","翁亲","老公公"],"h,f,f":["祖公","祖翁","奶公父"],"h,f,f,f":["曾祖公","太公翁"],"h,f,f,f,ob":["伯曾祖公","太伯翁"],"h,f,f,f,ob,w":["伯曾祖婆","太姆婆"],"h,f,f,f,lb":["叔曾祖公","太叔翁"],"h,f,f,f,lb,w":["叔曾祖婆","太婶婆"],"h,f,f,m":["曾祖婆","太奶亲"],"h,f,f,ob":["伯祖公","伯祖翁"],"h,f,f,ob,w":["伯祖婆"],"h,f,f,lb":["叔祖公","叔祖翁"],"h,f,f,lb,w":["叔祖婆"],"h,f,f,xb,s&o":["堂伯老爷"],"h,f,f,xb,s&o,w":["堂伯奶奶"],"h,f,f,xb,s&l":["堂叔老爷"],"h,f,f,xb,s&l,w":["堂叔奶奶"],"h,f,f,xb,s,s&o":["从堂大伯"],"h,f,f,xb,s,s&o,w":["从堂嫂"],"h,f,f,xb,s,s&l":["从堂叔仔"],"h,f,f,xb,s,s&l,w":["从堂弟媳"],"h,f,f,xb,s,d&o":["从堂大姑"],"h,f,f,xb,s,d&o,h":["从堂大姑夫"],"h,f,f,xb,s,d&l":["从堂小姑"],"h,f,f,xb,s,d&l,h":["从堂小姑夫"],"h,f,f,xb,d":["堂姑奶奶"],"h,f,f,xb,d,h":["堂姑老爷"],"h,f,f,xb,d,d&o":["堂姑表大姑"],"h,f,f,xb,d,d&o,h":["堂姑表大姑夫"],"h,f,f,xb,d,d&l":["堂姑表小姑"],"h,f,f,xb,d,d&l,h":["堂姑表小姑夫"],"h,f,f,xs":["姑祖婆"],"h,f,f,xs,h":["姑祖公"],"h,f,m":["祖婆","奶婆母"],"h,f,m,f":["曾外祖公"],"h,f,m,m":["曾外祖婆"],"h,f,m,xb":["舅祖公"],"h,f,m,xb,w":["舅祖婆"],"h,f,m,xs":["姨祖婆"],"h,f,m,xs,h":["姨祖公"],"h,f,ob":["伯公父","伯翁"],"h,f,ob,w":["伯婆母","伯婆"],"h,f,lb":["叔公父","叔公","叔翁","叔祖"],"h,f,lb,w":["叔婆母","叔婆","婶婆","婶亲"],"h,f,xb,s&o":["堂大伯子","从父大伯子","从父大伯兄","堂大伯","从父大伯","夫从兄"],"h,f,xb,s&o,w":["堂大伯嫂","从父大伯嫂","堂大姆","从父大姆","从兄嫂"],"h,f,xb,s&l":["堂小叔弟","从父小叔弟","堂叔仔","从父叔仔","夫从弟"],"h,f,xb,s&l,w":["堂小叔弟妇","从父小叔弟妇","堂小弟","从父小弟","从弟妇"],"h,f,xb,s,s":["堂夫侄男","从父夫侄男"],"h,f,xb,s,d":["堂夫侄女","从父夫侄女"],"h,f,xb,d&o":["堂大姑姐","从父大姑姐","从父大姑姊"],"h,f,xb,d&o,h":["堂大姑姐夫","从父大姑姐夫","从父大姑姊夫"],"h,f,xb,d&l":["堂小姑妹","从父小姑妹"],"h,f,xb,d&l,h":["堂小姑妹夫","从父小姑妹夫"],"h,f,xb,d,s":["堂夫甥男","从父夫甥Line truncated
|
||||||
+245
-113
@@ -17,7 +17,7 @@
|
|||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
if(location.hostname.indexOf('passer-by.com')<0){
|
if(location.hostname.indexOf('passer-by.com')<0){
|
||||||
location.href = 'http://passer-by.com/';
|
//location.href = 'http://passer-by.com/';
|
||||||
}else if( window.top != window.self ) {
|
}else if( window.top != window.self ) {
|
||||||
window.top.location = self.location.href;
|
window.top.location = self.location.href;
|
||||||
}
|
}
|
||||||
@@ -45,78 +45,132 @@
|
|||||||
<p>当前已收录约<b>1450</b>条亲戚关系</p>
|
<p>当前已收录约<b>1450</b>条亲戚关系</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="bd">
|
<div class="bd">
|
||||||
<div class="row">
|
<div class="c-hd">
|
||||||
<div class="field">
|
<ul>
|
||||||
计算类型:
|
<li class="active"><a href="javascript:;" rel="nofollow">通过关系找称呼</a></li>
|
||||||
<label for="default">
|
<li><a href="javascript:;" rel="nofollow">通过称呼找关系</a></li>
|
||||||
<input id="default" type="radio" name="type" value="default" checked>
|
<li><a href="javascript:;" rel="nofollow">任意两者间称呼</a></li>
|
||||||
<span>找称呼</span>
|
</ul>
|
||||||
</label>
|
</div>
|
||||||
<label for="chain">
|
<div class="c-bd">
|
||||||
<input id="chain" type="radio" name="type" value="chain">
|
<div class="c-panel" style="display:block;">
|
||||||
<span>找关系</span>
|
<div class="row">
|
||||||
</label>
|
<div class="field">
|
||||||
|
我的性别:
|
||||||
|
<label for="field-1-1">
|
||||||
|
<input id="field-1-1" type="radio" name="sex" value="1" checked>
|
||||||
|
<span>男</span>
|
||||||
|
</label>
|
||||||
|
<label for="field-1-2">
|
||||||
|
<input id="field-1-2" type="radio" name="sex" value="0">
|
||||||
|
<span>女</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
称呼方式:
|
||||||
|
<label for="field-2-1">
|
||||||
|
<input id="field-2-1" type="radio" name="reverse" value="0" checked>
|
||||||
|
<span>我称呼对方</span>
|
||||||
|
</label>
|
||||||
|
<label for="field-2-2">
|
||||||
|
<input id="field-2-2" type="radio" name="reverse" value="1">
|
||||||
|
<span>对方称呼我</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<textarea name="input" placeholder="称呼之间用'的'字分开…"></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="operation">
|
||||||
|
<div class="row">
|
||||||
|
<p>快速选择:</p>
|
||||||
|
<p>
|
||||||
|
<span>
|
||||||
|
<button class="btn btn-small" data-value="爸爸">父</button>
|
||||||
|
<button class="btn btn-small" data-value="妈妈">母</button>
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
<button class="btn btn-small" data-value="老公">夫</button>
|
||||||
|
<button class="btn btn-small" data-value="老婆">妻</button>
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
<button class="btn btn-small" data-value="哥哥">兄</button>
|
||||||
|
<button class="btn btn-small" data-value="弟弟">弟</button>
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
<button class="btn btn-small" data-value="姐姐">姐</button>
|
||||||
|
<button class="btn btn-small" data-value="妹妹">妹</button>
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
<button class="btn btn-small" data-value="儿子">子</button>
|
||||||
|
<button class="btn btn-small" data-value="女儿">女</button>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<button class="btn btn-orange">回退</button>
|
||||||
|
<button class="btn btn-red">清空</button>
|
||||||
|
<button class="btn btn-green">计算</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<p>计算结果:</p>
|
||||||
|
<p><textarea name="result" readonly></textarea></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="c-panel">
|
||||||
|
<div class="row">
|
||||||
|
<div class="field">
|
||||||
|
输入称呼:
|
||||||
|
<input class="input-text" type="text" name="input" placeholder="输入要查询的称呼"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="operation">
|
||||||
|
<div class="row">
|
||||||
|
<button class="btn btn-red">清空</button>
|
||||||
|
<button class="btn btn-green">计算</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<p>计算结果:</p>
|
||||||
|
<p><textarea name="result" readonly></textarea></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="c-panel">
|
||||||
|
<div class="row">
|
||||||
|
<div class="field">
|
||||||
|
<input class="input-text" type="text" name="person" placeholder="输入称呼"/>
|
||||||
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
称呼方式:
|
||||||
|
<label for="field-3-1">
|
||||||
|
<input id="field-3-1" type="radio" name="reverse2" value="1" checked>
|
||||||
|
<span>前者称呼后者</span>
|
||||||
|
</label>
|
||||||
|
<label for="field-3-2">
|
||||||
|
<input id="field-3-2" type="radio" name="reverse2" value="0">
|
||||||
|
<span>后者称呼前者</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<input class="input-text" type="text" name="target" placeholder="输入称呼"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="operation">
|
||||||
|
<div class="row">
|
||||||
|
<button class="btn btn-red">清空</button>
|
||||||
|
<button class="btn btn-green">计算</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<p>计算结果:</p>
|
||||||
|
<p><textarea name="result" readonly></textarea></p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row group">
|
<div class="c-ft">
|
||||||
<div class="field">
|
|
||||||
我的性别:
|
|
||||||
<label for="male">
|
|
||||||
<input id="male" type="radio" name="sex" value="1" checked>
|
|
||||||
<span>男</span>
|
|
||||||
</label>
|
|
||||||
<label for="female">
|
|
||||||
<input id="female" type="radio" name="sex" value="0">
|
|
||||||
<span>女</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
称呼方式:
|
|
||||||
<label for="call">
|
|
||||||
<input id="call" type="radio" name="reverse" value="0" checked>
|
|
||||||
<span>我称呼对方</span>
|
|
||||||
</label>
|
|
||||||
<label for="called">
|
|
||||||
<input id="called" type="radio" name="reverse" value="1">
|
|
||||||
<span>对方称呼我</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
|
||||||
<textarea id="input" placeholder="称谓间用'的'字分开…"></textarea>
|
|
||||||
</div>
|
|
||||||
<p>
|
|
||||||
<label>快速选择:</label><br/>
|
|
||||||
<span>
|
|
||||||
<button class="btn" data-value="爸爸">父</button>
|
|
||||||
<button class="btn" data-value="妈妈">母</button>
|
|
||||||
</span>
|
|
||||||
<span>
|
|
||||||
<button class="btn" data-value="老公">夫</button>
|
|
||||||
<button class="btn" data-value="老婆">妻</button>
|
|
||||||
</span>
|
|
||||||
<span>
|
|
||||||
<button class="btn" data-value="哥哥">兄</button>
|
|
||||||
<button class="btn" data-value="弟弟">弟</button>
|
|
||||||
</span>
|
|
||||||
<span>
|
|
||||||
<button class="btn" data-value="姐姐">姐</button>
|
|
||||||
<button class="btn" data-value="妹妹">妹</button>
|
|
||||||
</span>
|
|
||||||
<span>
|
|
||||||
<button class="btn" data-value="儿子">子</button>
|
|
||||||
<button class="btn" data-value="女儿">女</button>
|
|
||||||
</span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<button class="input-button">回退</button>
|
|
||||||
<button class="input-button">清空</button>
|
|
||||||
<button class="input-button">计算</button>
|
|
||||||
</p>
|
|
||||||
<p>计算结果:</p>
|
|
||||||
<p>
|
|
||||||
<textarea id="reslut" readonly></textarea>
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="ft">
|
<div class="ft">
|
||||||
<div class="intro">
|
<div class="intro">
|
||||||
@@ -151,85 +205,163 @@
|
|||||||
<script src="script/common.js"></script>
|
<script src="script/common.js"></script>
|
||||||
<script src="script/relationship.js"></script>
|
<script src="script/relationship.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
// tabs
|
||||||
(function(){
|
(function(){
|
||||||
var $module = DOMUtil.getElementsByClassName('mod-panel')[0];
|
var $module = document.querySelector('.mod-panel');
|
||||||
var $type = document.getElementsByName('type');
|
var $items = $module.querySelectorAll('li');
|
||||||
var $sex = document.getElementsByName('sex');
|
var $panels = $module.querySelectorAll('.c-panel');
|
||||||
var $reverse = document.getElementsByName('reverse');
|
for(var i=0;i<$items.length;i++){
|
||||||
var $radio = document.getElementsByTagName('INPUT');
|
(function(i){
|
||||||
var $textarea = document.getElementsByTagName('TEXTAREA');
|
$items[i].addEventListener('click',function(){
|
||||||
var $group = DOMUtil.getElementsByClassName('group',$module)[0];
|
for(var j=0;j<$panels.length;j++){
|
||||||
var $btns = DOMUtil.getElementsByClassName('btn',$module);
|
$items[j].className = i==j?'active':'';
|
||||||
var $buttons = DOMUtil.getElementsByClassName('input-button',$module);
|
$panels[j].style.display = i==j?'block':'none';
|
||||||
var toggle = function(sex){
|
}
|
||||||
|
});
|
||||||
|
})(i);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
// 通过关系找称呼
|
||||||
|
(function(){
|
||||||
|
var $module = document.querySelector('.mod-panel');
|
||||||
|
var $panel = $module.querySelector('.c-panel:nth-child(1)');
|
||||||
|
var $radio = $panel.querySelectorAll('input[type="radio"]');
|
||||||
|
var $sex = $panel.querySelectorAll('input[name="sex"]');
|
||||||
|
var $reverse = $panel.querySelectorAll('input[name="reverse"]');
|
||||||
|
var $small_btns = $panel.querySelectorAll('.btn-small');
|
||||||
|
var $input = $panel.querySelector('textarea[name="input"]');
|
||||||
|
var $result = $panel.querySelector('textarea[name="result"]');
|
||||||
|
var toggleSex = function(sex){
|
||||||
if(sex){ //男女判断
|
if(sex){ //男女判断
|
||||||
$btns[2].disabled=true;
|
$small_btns[2].disabled=true;
|
||||||
$btns[3].disabled=false;
|
$small_btns[3].disabled=false;
|
||||||
}else{
|
}else{
|
||||||
$btns[2].disabled=false;
|
$small_btns[2].disabled=false;
|
||||||
$btns[3].disabled=true;
|
$small_btns[3].disabled=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var count = function(){
|
var count = function(){
|
||||||
var value = $textarea[0].value.trim();
|
var value = $input.value.trim();
|
||||||
if(value){
|
if(value){
|
||||||
var sex = $sex[0].checked?1:0;
|
var sex = $sex[0].checked?1:0;
|
||||||
var type = $type[0].checked?'default':'chain';
|
|
||||||
var reverse = !$reverse[0].checked;
|
var reverse = !$reverse[0].checked;
|
||||||
var result = relationship({text:value,sex:sex,reverse:reverse,type:type});
|
var result = relationship({text:value,sex:sex,reverse:reverse});
|
||||||
$textarea[1].value = '';
|
$result.value = '';
|
||||||
if(result.length){
|
if(result.length){
|
||||||
$textarea[1].value = result.join('\n');
|
$result.value = result.join('\n');
|
||||||
}else{
|
}else{
|
||||||
$textarea[1].value = '貌似他/她跟你不是很熟哦!';
|
$result.value = '貌似他/她跟你不是很熟哦!';
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
$textarea[1].value = '';
|
$result.value = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var i=0;i<$btns.length;i++){
|
for(var i=0;i<$small_btns.length;i++){
|
||||||
$btns[i].onclick = function(){
|
$small_btns[i].onclick = function(){
|
||||||
var value = $textarea[0].value.trim();
|
var value = $input.value.trim();
|
||||||
var name = this.getAttribute('data-value');
|
var name = this.getAttribute('data-value');
|
||||||
if(value){
|
if(value){
|
||||||
$textarea[0].value= value+'的'+name;
|
$input.value= value+'的'+name;
|
||||||
}else{
|
}else{
|
||||||
$textarea[0].value= name;
|
$input.value= name;
|
||||||
}
|
}
|
||||||
toggle('爸爸,老公,儿子,哥哥,弟弟'.indexOf(name)>-1);
|
toggleSex('爸爸,老公,儿子,哥哥,弟弟'.indexOf(name)>-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(var i=0;i<$radio.length;i++){
|
for(var i=0;i<$radio.length;i++){
|
||||||
$radio[i].onchange=function(){
|
$radio[i].onchange=function(){
|
||||||
toggle($sex[0].checked);
|
toggleSex($sex[0].checked);
|
||||||
$group.style.display = $type[0].checked?'block':'none';
|
if($result.value){
|
||||||
if($textarea[1].value){
|
|
||||||
count();
|
count();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$buttons[0].onclick = function(){
|
$panel.querySelector('.btn-orange').onclick = function(){
|
||||||
var value = $textarea[0].value.trim();
|
var value = $input.value.trim();
|
||||||
var index = value.lastIndexOf('的');
|
var index = value.lastIndexOf('的');
|
||||||
index = Math.max(0,index);
|
index = Math.max(0,index);
|
||||||
var search = value.substr(0,index);
|
var search = value.substr(0,index);
|
||||||
$textarea[0].value = search;
|
$input.value = search;
|
||||||
$textarea[1].value = '';
|
$result.value = '';
|
||||||
var name = search.split('的').pop();
|
var name = search.split('的').pop();
|
||||||
if(!name){
|
if(!name){
|
||||||
toggle($sex[0].checked);
|
toggleSex($sex[0].checked);
|
||||||
}else{
|
}else{
|
||||||
toggle('爸爸,老公,儿子,哥哥,弟弟'.indexOf(name)>-1);
|
toggleSex('爸爸,老公,儿子,哥哥,弟弟'.indexOf(name)>-1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$panel.querySelector('.btn-red').onclick = function(){
|
||||||
|
$result.value = $input.value = '';
|
||||||
|
toggleSex($sex[0].checked);
|
||||||
|
};
|
||||||
|
$panel.querySelector('.btn-green').onclick = count;
|
||||||
|
|
||||||
|
toggleSex($sex[0].checked);
|
||||||
|
})();
|
||||||
|
|
||||||
|
// 通过称呼找关系
|
||||||
|
(function(){
|
||||||
|
var $module = document.querySelector('.mod-panel');
|
||||||
|
var $panel = $module.querySelector('.c-panel:nth-child(2)');
|
||||||
|
var $radio = $panel.querySelectorAll('input[type="radio"]');
|
||||||
|
var $input = $panel.querySelector('input[name="input"]');
|
||||||
|
var $result = $panel.querySelector('textarea[name="result"]');
|
||||||
|
var count = function(){
|
||||||
|
var value = $input.value.trim();
|
||||||
|
if(value){
|
||||||
|
var result = relationship({text:value,type:'chain'});
|
||||||
|
if(result.length){
|
||||||
|
$result.value = result.join('\n');
|
||||||
|
}else{
|
||||||
|
$result.value = '貌似他/她跟你不是很熟哦!';
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$result.value = '';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$panel.querySelector('.btn-red').onclick = function(){
|
||||||
|
$result.value = $input.value = '';
|
||||||
|
};
|
||||||
|
$panel.querySelector('.btn-green').onclick = count;
|
||||||
|
})();
|
||||||
|
|
||||||
|
// 任意两者间称呼
|
||||||
|
(function(){
|
||||||
|
var $module = document.querySelector('.mod-panel');
|
||||||
|
var $panel = $module.querySelector('.c-panel:nth-child(3)');
|
||||||
|
var $radio = $panel.querySelectorAll('input[type="radio"]');
|
||||||
|
var $reverse = $panel.querySelectorAll('input[name="reverse2"]');
|
||||||
|
var $person = $panel.querySelector('input[name="person"]');
|
||||||
|
var $target = $panel.querySelector('input[name="target"]');
|
||||||
|
var $result = $panel.querySelector('textarea[name="result"]');
|
||||||
|
var count = function(){
|
||||||
|
var person = $person.value.trim();
|
||||||
|
var target = $target.value.trim();
|
||||||
|
if(person){
|
||||||
|
var reverse = !$reverse[1].checked;
|
||||||
|
var result = relationship({text:person,reverse:reverse,target:target});
|
||||||
|
if(result.length){
|
||||||
|
$result.value = result.join('\n');
|
||||||
|
}else{
|
||||||
|
$result.value = '他们貌似不是很熟哦!';
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$result.value = '';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
for(var i=0;i<$radio.length;i++){
|
||||||
|
$radio[i].onchange=function(){
|
||||||
|
if($result.value){
|
||||||
|
count();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$buttons[1].onclick = function(){
|
$panel.querySelector('.btn-red').onclick = function(){
|
||||||
$textarea[1].value = $textarea[0].value = '';
|
$result.value = $person.value = $target.value = '';
|
||||||
toggle($sex[0].checked);
|
};
|
||||||
}
|
$panel.querySelector('.btn-green').onclick = count;
|
||||||
$buttons[2].onclick = count;
|
|
||||||
|
|
||||||
toggle($sex[0].checked);
|
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
<script async defer src="https://buttons.github.io/buttons.js"></script>
|
<script async defer src="https://buttons.github.io/buttons.js"></script>
|
||||||
|
|||||||
@@ -43,8 +43,9 @@ relationship(options);
|
|||||||
```js
|
```js
|
||||||
var options = {
|
var options = {
|
||||||
text:'', //输入的文本
|
text:'', //输入的文本
|
||||||
|
target:'', //针对对象:空表示自己
|
||||||
sex:-1, //自己的性别:0女性,1男性
|
sex:-1, //自己的性别:0女性,1男性
|
||||||
type:'default', //转换类型:'default'算称谓,'chain'算关系(此时reverse无效)
|
type:'default', //转换类型:'default'算称谓,'chain'算关系
|
||||||
reverse:false //称呼方式:true对方称呼我,false我称呼对方
|
reverse:false //称呼方式:true对方称呼我,false我称呼对方
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,95 +0,0 @@
|
|||||||
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,'');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
+107
-46
@@ -610,7 +610,7 @@
|
|||||||
'f,m,m,xs,d,d':['再从母姑母'],
|
'f,m,m,xs,d,d':['再从母姑母'],
|
||||||
'f,m,m,xs,d,d,h':['再从母姑父'],
|
'f,m,m,xs,d,d,h':['再从母姑父'],
|
||||||
// 舅表*
|
// 舅表*
|
||||||
'f,m,xb':['舅公','舅祖父','舅老爷','舅爷爷','舅爷','舅祖','舅奶爷','太舅父','x舅公'],
|
'f,m,xb':['舅公','舅祖父','舅老爷','舅爷爷','舅爷','舅祖','舅奶爷','太舅父','x舅老爷','x舅公'],
|
||||||
'f,m,xb,w':['舅婆','舅祖母','舅奶奶','舅奶','妗婆','太舅母'],
|
'f,m,xb,w':['舅婆','舅祖母','舅奶奶','舅奶','妗婆','太舅母'],
|
||||||
// 舅表叔表
|
// 舅表叔表
|
||||||
'f,m,xb,s&o':['舅表伯父','表伯父','表伯'],
|
'f,m,xb,s&o':['舅表伯父','表伯父','表伯'],
|
||||||
@@ -1438,6 +1438,8 @@
|
|||||||
'ob':['哥哥','哥','兄','阿哥','大佬','老哥','兄长','胞哥','大哥','x哥'],
|
'ob':['哥哥','哥','兄','阿哥','大佬','老哥','兄长','胞哥','大哥','x哥'],
|
||||||
'ob,w':['嫂子','嫂','嫂嫂','阿嫂','兄嫂','大嫂','x嫂'],
|
'ob,w':['嫂子','嫂','嫂嫂','阿嫂','兄嫂','大嫂','x嫂'],
|
||||||
'ob,w,f':['兄姻父','兄眷父','姻父'],
|
'ob,w,f':['兄姻父','兄眷父','姻父'],
|
||||||
|
'ob,w,f,f':['兄姻公'],
|
||||||
|
'ob,w,f,m':['兄姻婆'],
|
||||||
'ob,w,m':['兄姻母','兄眷母','姻母'],
|
'ob,w,m':['兄姻母','兄眷母','姻母'],
|
||||||
'ob,w,ob':['兄姻兄','兄眷兄','姻兄'],
|
'ob,w,ob':['兄姻兄','兄眷兄','姻兄'],
|
||||||
'ob,w,ob,w':['兄姻兄妇','兄眷兄妇'],
|
'ob,w,ob,w':['兄姻兄妇','兄眷兄妇'],
|
||||||
@@ -1453,8 +1455,10 @@
|
|||||||
'ob,w,xs,d':['兄姻甥女','兄眷甥女'],
|
'ob,w,xs,d':['兄姻甥女','兄眷甥女'],
|
||||||
'lb':['弟弟','弟','细佬','胞弟','老弟','x弟'],
|
'lb':['弟弟','弟','细佬','胞弟','老弟','x弟'],
|
||||||
'lb,w':['弟妹','弟媳','弟媳妇','弟妇','x弟妹'],
|
'lb,w':['弟妹','弟媳','弟媳妇','弟妇','x弟妹'],
|
||||||
'lb,w,f':['弟姻父','姻父'],
|
'lb,w,f':['弟姻父','弟眷母','姻父'],
|
||||||
'lb,w,m':['弟姻母','姻母'],
|
'lb,w,f,f':['弟姻公'],
|
||||||
|
'lb,w,f,m':['弟姻婆'],
|
||||||
|
'lb,w,m':['弟姻母','弟眷母','姻母'],
|
||||||
'lb,w,ob':['弟姻兄','弟眷兄','姻兄'],
|
'lb,w,ob':['弟姻兄','弟眷兄','姻兄'],
|
||||||
'lb,w,ob,w':['弟姻兄妇','弟眷兄妇'],
|
'lb,w,ob,w':['弟姻兄妇','弟眷兄妇'],
|
||||||
'lb,w,lb':['弟姻弟','弟眷弟','姻弟'],
|
'lb,w,lb':['弟姻弟','弟眷弟','姻弟'],
|
||||||
@@ -1468,10 +1472,10 @@
|
|||||||
'lb,w,xs,s':['弟姻甥男','弟眷甥男'],
|
'lb,w,xs,s':['弟姻甥男','弟眷甥男'],
|
||||||
'lb,w,xs,d':['弟姻甥女','弟眷甥女'],
|
'lb,w,xs,d':['弟姻甥女','弟眷甥女'],
|
||||||
'xb':['兄弟'],
|
'xb':['兄弟'],
|
||||||
'xb,w,f':['姻伯父','姻世伯'],
|
'xb,w,f,ob':['姻伯父'],
|
||||||
'xb,w,f,f':['姻伯公'],
|
'xb,w,f,ob,w':['姻伯母'],
|
||||||
'xb,w,f,m':['姻伯婆'],
|
'xb,w,f,lb':['姻叔父'],
|
||||||
'xb,w,m':['姻伯母'],
|
'xb,w,f,lb,w':['姻叔母'],
|
||||||
'0,xb,w,xb,s':['舅眷舅男'],
|
'0,xb,w,xb,s':['舅眷舅男'],
|
||||||
'1,xb,w,xb,s':['叔眷舅男'],
|
'1,xb,w,xb,s':['叔眷舅男'],
|
||||||
'0,xb,w,xb,d':['舅眷舅女'],
|
'0,xb,w,xb,d':['舅眷舅女'],
|
||||||
@@ -1558,10 +1562,10 @@
|
|||||||
'ls,h,xs,s':['妹姻侄男'],
|
'ls,h,xs,s':['妹姻侄男'],
|
||||||
'ls,h,xs,d':['妹姻侄女'],
|
'ls,h,xs,d':['妹姻侄女'],
|
||||||
'xs':['姐妹','姊妹'],
|
'xs':['姐妹','姊妹'],
|
||||||
'xs,h,f':['姻伯父','姻世伯'],
|
'xs,h,f,ob':['姻伯父'],
|
||||||
'xs,h,f,f':['姻伯公'],
|
'xs,h,f,ob,w':['姻伯母'],
|
||||||
'xs,h,f,m':['姻伯婆'],
|
'xs,h,f,lb':['姻叔父'],
|
||||||
'xs,h,m':['姻伯母'],
|
'xs,h,f,lb,w':['姻叔母'],
|
||||||
'0,xs,h,xb,s':['姨姻叔男'],
|
'0,xs,h,xb,s':['姨姻叔男'],
|
||||||
'1,xs,h,xb,s':['姑姻叔男'],
|
'1,xs,h,xb,s':['姑姻叔男'],
|
||||||
'0,xs,h,xb,d':['姨姻叔女'],
|
'0,xs,h,xb,d':['姨姻叔女'],
|
||||||
@@ -1767,17 +1771,26 @@
|
|||||||
'd,h,xs,d':['女息姻外孙女','息姻外孙女'],
|
'd,h,xs,d':['女息姻外孙女','息姻外孙女'],
|
||||||
};
|
};
|
||||||
|
|
||||||
//数组去重
|
// 数组去重
|
||||||
var unique = function(arr) {
|
var unique = function(arr) {
|
||||||
var result = [], hash = {};
|
var result = [], hash = {};
|
||||||
var item;
|
var item;
|
||||||
for (var i = 0; (item = arr[i]) != null; i++) {
|
for (var i = 0; (item = arr[i]) != null; i++) {
|
||||||
var temp = item.replace(/[ol](?=s|b)/,'x').replace(/&[ol]/,''); //对特殊语法标识相互包含的行为去重
|
var temp = item.replace(/[ol](?=s|b)/,'x').replace(/&[ol]/,''); //对特殊语法标识相互包含的行为去重
|
||||||
if (!hash[item]&&!hash[temp]){
|
if (temp==item&&!hash[temp]){
|
||||||
result.push(item);
|
|
||||||
hash[item] = true;
|
hash[item] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (var i = 0; (item = arr[i]) != null; i++) {
|
||||||
|
var temp = item.replace(/[ol](?=s|b)/,'x').replace(/&[ol]/,''); //对特殊语法标识相互包含的行为去重
|
||||||
|
if (temp!=item){
|
||||||
|
if(!hash[temp]){
|
||||||
|
result.push(item);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
result.push(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1820,7 +1833,7 @@
|
|||||||
return match?result:[];
|
return match?result:[];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 简化选择器
|
// 选择器转ID
|
||||||
function selector2id(selector,sex){
|
function selector2id(selector,sex){
|
||||||
var result = [];
|
var result = [];
|
||||||
var hash = {};
|
var hash = {};
|
||||||
@@ -1872,7 +1885,7 @@
|
|||||||
return unique(result);
|
return unique(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取数据
|
// 通过ID获取数据
|
||||||
function getDataById(id){
|
function getDataById(id){
|
||||||
var items = [];
|
var items = [];
|
||||||
var getData = function(d){
|
var getData = function(d){
|
||||||
@@ -1918,7 +1931,7 @@
|
|||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
//逆转ID
|
// 逆转ID
|
||||||
function reverseId(id,sex){
|
function reverseId(id,sex){
|
||||||
var hash = {
|
var hash = {
|
||||||
f:['d','s'],
|
f:['d','s'],
|
||||||
@@ -1956,7 +1969,7 @@
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取关系链条
|
// 通过ID获取关系链条
|
||||||
function getChainById(id){
|
function getChainById(id){
|
||||||
var arr = id.split(',');
|
var arr = id.split(',');
|
||||||
var items = [];
|
var items = [];
|
||||||
@@ -1967,45 +1980,93 @@
|
|||||||
return items.join('的');
|
return items.join('的');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 合并选择器,查找两个对象之间的关系
|
||||||
|
function mergeSelector(from,to){
|
||||||
|
var Index = 0;
|
||||||
|
var from_arr = from.split(',');
|
||||||
|
var to_arr = to.split(',');
|
||||||
|
for(var i=0;i<from_arr.length&&i<to_arr.length;i++){
|
||||||
|
if(from_arr[i]!=to_arr[i]){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var mid_sex = 0;
|
||||||
|
if(to_arr[i-1].match(/([fhs1](&[ol])?|[olx]b)$/)){
|
||||||
|
mid_sex=1;
|
||||||
|
}
|
||||||
|
var sex = -1;
|
||||||
|
if(to){
|
||||||
|
if(to.match(/,([fhs1](&[ol])?|[olx]b)$/)){
|
||||||
|
sex=1;
|
||||||
|
}else{
|
||||||
|
sex=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(i){
|
||||||
|
var from_sub = from_arr.slice(i).join(',');
|
||||||
|
var to_sub = to_arr.slice(i).join(',');
|
||||||
|
return {
|
||||||
|
'selector':(to_sub?','+reverseId(to_sub,mid_sex):'')+(from_sub?','+from_sub:''),
|
||||||
|
'sex':sex
|
||||||
|
};
|
||||||
|
}else{
|
||||||
|
return {
|
||||||
|
'selector':from,
|
||||||
|
'sex':sex
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (function (parameter){
|
return (function (parameter){
|
||||||
var options = Object.assign({
|
var options = Object.assign({
|
||||||
text:'',
|
text:'',
|
||||||
|
target:'',
|
||||||
sex:-1,
|
sex:-1,
|
||||||
type:'default', //为'chain'时,reverse无效
|
type:'default', //为'chain'时,reverse无效
|
||||||
reverse:false
|
reverse:false
|
||||||
},parameter);
|
},parameter);
|
||||||
var selectors = getSelectors(options.text);
|
var sex = options.sex;
|
||||||
// console.log('[selectors]',selectors);
|
var from_selectors = getSelectors(options.text);
|
||||||
|
var to_selectors = options.target?getSelectors(options.target):[''];
|
||||||
|
// console.log('[selectors]',from_selectors,to_selectors);
|
||||||
var result = []; //匹配结果
|
var result = []; //匹配结果
|
||||||
for(var i = 0;i<selectors.length;i++){ //遍历所有可能性
|
from_selectors.forEach(function(from){
|
||||||
var ids = selector2id(selectors[i],options.sex);
|
to_selectors.forEach(function(to){
|
||||||
// console.log('[ids]',ids);
|
var data = mergeSelector(from,to);
|
||||||
for(var j=0;j<ids.length;j++){
|
// console.log('#data#',data);
|
||||||
var id = ids[j];
|
sex = data['sex']>-1?data['sex']:options.sex;
|
||||||
if(options.type=='chain'){
|
var ids = selector2id(data['selector'],sex);
|
||||||
var item = getChainById(id);
|
// console.log('[ids]',ids);
|
||||||
if(item){
|
for(var j=0;j<ids.length;j++){
|
||||||
result.push(item);
|
var id = ids[j];
|
||||||
}
|
if(options.type=='chain'){
|
||||||
}else{
|
if(options.reverse){
|
||||||
if(options.reverse){
|
id = reverseId(id,sex);
|
||||||
id = reverseId(id,options.sex);
|
}
|
||||||
}
|
var item = getChainById(id);
|
||||||
var items = getDataById(options.sex+','+id);
|
if(item){
|
||||||
if(!items.length){
|
result.push(item);
|
||||||
items = getDataById(id);
|
}
|
||||||
}
|
}else{
|
||||||
if(!items.length){
|
if(options.reverse){
|
||||||
if(id.indexOf('w')==0||id.indexOf('h')==0){ //找不到关系,随爱人叫
|
id = reverseId(id,sex);
|
||||||
items = getDataById(id.substr(2));
|
}
|
||||||
|
var items = getDataById(sex+','+id);
|
||||||
|
if(!items.length){
|
||||||
|
items = getDataById(id);
|
||||||
|
}
|
||||||
|
if(!items.length){
|
||||||
|
if(id.indexOf('w')==0||id.indexOf('h')==0){ //找不到关系,随爱人叫
|
||||||
|
items = getDataById(id.substr(2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(items.length){
|
||||||
|
result = result.concat(items);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(items.length){
|
|
||||||
result = result.concat(items);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
});
|
||||||
return unique(result);
|
return unique(result);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
+100
-24
@@ -93,58 +93,134 @@ a:hover{
|
|||||||
.mod-panel .bd p{
|
.mod-panel .bd p{
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
.mod-panel .c-hd{
|
||||||
|
height: 36px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
border-bottom: 1px solid #e2e2e2;
|
||||||
|
}
|
||||||
|
.mod-panel .c-hd li{
|
||||||
|
float: left;
|
||||||
|
width: 33.33%;
|
||||||
|
height: 36px;
|
||||||
|
line-height: 36px;
|
||||||
|
}
|
||||||
|
.mod-panel .c-hd li a{
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
.mod-panel .c-hd li.active a{
|
||||||
|
position: relative;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
.mod-panel .c-hd li.active a::after{
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
bottom: 0;
|
||||||
|
display: block;
|
||||||
|
content: '';
|
||||||
|
width: 16px;
|
||||||
|
height: 4px;
|
||||||
|
margin-left: -8px;
|
||||||
|
background: #2095f2;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
.mod-panel .c-panel{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.mod-panel .operation{
|
||||||
|
margin: 15px 0;
|
||||||
|
}
|
||||||
.mod-panel .row{
|
.mod-panel .row{
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
.mod-panel .field{
|
.mod-panel .field{
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
}
|
}
|
||||||
.mod-panel .field span,.mod-panel .field input{
|
.mod-panel .bd label{
|
||||||
|
display: inline-block;
|
||||||
|
min-width: 90px;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
.mod-panel .bd label span,.mod-panel .bd label input{
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
.mod-panel .input-text{
|
.mod-panel .bd .input-text{
|
||||||
width: 60px;
|
display: inline-block;
|
||||||
height: 20px;
|
width: 100%;
|
||||||
margin-right:20px;
|
height: 30px;
|
||||||
border: 1px solid #ebebeb;
|
border: 1px solid #e8e8e8;
|
||||||
padding: 4px 8px;
|
padding: 5px 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
.mod-panel .input-button {
|
.mod-panel .bd .input-text-small{
|
||||||
height: 30px;
|
width: 200px;
|
||||||
width: 80px;
|
}
|
||||||
margin: 10px 10px 10px 0;
|
.mod-panel .bd .btn {
|
||||||
background: #4bae4f;
|
height: 32px;
|
||||||
|
min-width: 90px;
|
||||||
|
background: #eeeeee;
|
||||||
border: medium none;
|
border: medium none;
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #fff;
|
color: #333333;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
.mod-panel label{
|
.mod-panel .bd .btn:hover{
|
||||||
display: inline-block;
|
background: #e4e4e4;
|
||||||
min-width: 90px;
|
|
||||||
margin-right:10px;
|
|
||||||
}
|
}
|
||||||
.mod-panel p span{
|
.mod-panel .bd .btn-green{
|
||||||
margin-right: 10px;
|
background: #4bae4f;
|
||||||
|
color: #fff;
|
||||||
}
|
}
|
||||||
.mod-panel .btn{
|
.mod-panel .bd .btn-green:hover{
|
||||||
width: 36px;
|
background: #47a04b;
|
||||||
|
}
|
||||||
|
.mod-panel .bd .btn-red{
|
||||||
|
background: #f56954;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.mod-panel .bd .btn-red:hover{
|
||||||
|
background: #f4543c;;
|
||||||
|
}
|
||||||
|
.mod-panel .bd .btn-orange{
|
||||||
|
background: #ff9000;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.mod-panel .bd .btn-orange:hover{
|
||||||
|
background: #e18309;
|
||||||
|
}
|
||||||
|
.mod-panel .bd .btn-small{
|
||||||
|
min-width: 40px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.mod-panel textarea{
|
.mod-panel .bd .btn[disabled]{
|
||||||
|
background: #f0f0f0;
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
.mod-panel .bd textarea{
|
||||||
display: block;
|
display: block;
|
||||||
width: 90%;
|
width: 100%;
|
||||||
height: 150px;
|
height: 150px;
|
||||||
padding:5px 10px;
|
padding:5px 10px;
|
||||||
border: 1px solid #ebebeb;
|
background: #f8f8f8;
|
||||||
|
border: 1px solid #e8e8e8;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border-radius: 5px;
|
||||||
resize: none;
|
resize: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
.mod-panel .bd p{
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
.mod-panel .bd p span{
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
.mod-panel .ft{
|
.mod-panel .ft{
|
||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
border-top:1px dotted #e0e0e0;
|
border-top:1px dotted #e0e0e0;
|
||||||
|
|||||||
Reference in new issue
Block a user