updated 重写选择器合并方法,支持任意复合计算
This commit is contained in:
parent
09dd56ca46
commit
128eb45f46
4
dist/relationship.min.js
vendored
4
dist/relationship.min.js
vendored
File diff suppressed because one or more lines are too long
@ -174,7 +174,7 @@
|
|||||||
str:''
|
str:''
|
||||||
},
|
},
|
||||||
{//并列关系处理1
|
{//并列关系处理1
|
||||||
exp:/(.+)?\[([^\|]+?)\|([^\[\]]+?\|[^\[\]]+?)?\](.+)?/g,
|
exp:/(.+)?\[([^\|]+?)\|([^\[\]]+?\|[^\[\]]+?)\](.+)?/g,
|
||||||
str:'$1$2$4#$1[$3]$4'
|
str:'$1$2$4#$1[$3]$4'
|
||||||
},
|
},
|
||||||
{//并列关系处理2
|
{//并列关系处理2
|
||||||
@ -2456,23 +2456,45 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 合并选择器,查找两个对象之间的关系
|
// 合并选择器,查找两个对象之间的关系
|
||||||
function mergeSelector(from,to,mid_sex){
|
function mergeSelector(from,to,my_sex){
|
||||||
var sex = mid_sex;
|
if(my_sex<0){
|
||||||
|
if(from.match(/^,w/)||to.match(/^,w/)){
|
||||||
|
my_sex = 1;
|
||||||
|
}else if(from.match(/^,h/)||to.match(/^,h/)){
|
||||||
|
my_sex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var sex = my_sex;
|
||||||
|
var from_ids = selector2id(from,my_sex);
|
||||||
|
var to_ids = selector2id(to,my_sex);
|
||||||
|
var r_ids = [];
|
||||||
if(to){
|
if(to){
|
||||||
sex = to.match(/([fhs1](&[ol])?|[olx]b)$/)?1:0;
|
var isMale = false;
|
||||||
|
var isFemale = false;
|
||||||
|
to_ids.forEach(function(id){
|
||||||
|
if(id.match(/([fhs1](&[ol])?|[olx]b)$/)){
|
||||||
|
isMale = true;
|
||||||
}
|
}
|
||||||
var ids = reverseId(to.substr(1),mid_sex);
|
if(id.match(/([mwd0](&[ol])?|[olx]s)$/)){
|
||||||
if(ids.length>1){
|
isFemale = true;
|
||||||
|
}
|
||||||
|
r_ids = r_ids.concat(reverseId(id,my_sex));
|
||||||
|
});
|
||||||
|
r_ids = unique(r_ids);
|
||||||
|
if(isMale&&isFemale){
|
||||||
|
sex = -1;
|
||||||
|
}else if(isMale){
|
||||||
|
sex = 1;
|
||||||
|
}else if(isFemale){
|
||||||
|
sex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var from_selector = from_ids.length>1?'['+from_ids.join('|')+']':from_ids[0];
|
||||||
|
var to_selector = r_ids.length>1?'['+r_ids.join('|')+']':r_ids[0];
|
||||||
return {
|
return {
|
||||||
'selector':(to?',['+ids.join('|')+']':'')+from,
|
'selector':(to?','+to_selector:'')+','+from_selector,
|
||||||
'sex':sex
|
'sex':sex
|
||||||
};
|
};
|
||||||
}else{
|
|
||||||
return {
|
|
||||||
'selector':(to?','+ids[0]+'':'')+from,
|
|
||||||
'sex':sex
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var relationship = function (parameter){
|
var relationship = function (parameter){
|
||||||
@ -2501,7 +2523,7 @@
|
|||||||
var data = mergeSelector(from,to,options.sex);
|
var data = mergeSelector(from,to,options.sex);
|
||||||
// console.log('[data]',data);
|
// console.log('[data]',data);
|
||||||
var ids = selector2id(data['selector'],data['sex']);
|
var ids = selector2id(data['selector'],data['sex']);
|
||||||
// console.log('[ids]',data['selector'],sex,ids);
|
// console.log('[ids]',data['selector'],data['sex'],ids);
|
||||||
if(ids){
|
if(ids){
|
||||||
ids.forEach(function(id){
|
ids.forEach(function(id){
|
||||||
var temps = [id];
|
var temps = [id];
|
||||||
|
@ -21,6 +21,6 @@ test('relationship.js show to be tested', function (t) {
|
|||||||
t.deepEqual(relationship({text:'岳母',target:'女儿',reverse:true}),['外孙女']);
|
t.deepEqual(relationship({text:'岳母',target:'女儿',reverse:true}),['外孙女']);
|
||||||
t.deepEqual(relationship({text:'姑妈',target:'舅妈',reverse:true}),['兄弟眷兄妇','兄弟眷弟妇']);
|
t.deepEqual(relationship({text:'姑妈',target:'舅妈',reverse:true}),['兄弟眷兄妇','兄弟眷弟妇']);
|
||||||
t.deepEqual(relationship({text:'舅妈',target:'女儿',reverse:true}),['姑甥孙女','姑甥外孙女']);
|
t.deepEqual(relationship({text:'舅妈',target:'女儿',reverse:true}),['姑甥孙女','姑甥外孙女']);
|
||||||
|
t.deepEqual(relationship({text:'老公的父母',target:'孩子'}),['爷爷','奶奶']);
|
||||||
t.end();
|
t.end();
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user