function realsQuery(element) {
	if(!element){
		return "";
	}
	var currentQuery="";
    if (element.id !== "") {//判断id属性,如果这个元素有id,则显 示//*[@id="xPath"]  形式内容
       currentQuery=‘#‘ + element.id;
    }else{
		
		var tagName=element.tagName.toLowerCase();
		var ix = 1,//在nodelist中的位置,且每次点击初始化
			siblings = element.parentNode.childNodes;//同级的子元素
		 currentQuery=getThisQuery(element,siblings)
		currentQuery=getParentQuery(element,currentQuery);
	}
    
	console.log(currentQuery);
};
function getParentQuery(element,queryName){
	var that=element.parentNode;
	if(that!=null){
		if(that.tagName.toLowerCase()=="body"){
			queryName="body > "+queryName;
		}else{
			var iiid=that.id;
			var testCss=""; 
			if(iiid){
				testCss=iiid.replace(/\s*/g,"");
			}
			
			
			if(testCss){
				queryName="#"+iiid+" > "+queryName;
			}else{
				var siblings=null
				if(that.parentNode){
					siblings=that.parentNode.childNodes;
				}else{
					siblings=[that];
				}
				
				
				var currentName=getThisQuery(that,siblings);
				
				queryName=currentName+" > "+queryName;
				
				//queryName=element.parentNode.tagName.toLowerCase()+" > "+queryName;
				if(that!=null){
					queryName=getParentQuery(that,queryName);
				}
			}
			
			
			
		}
		
		
	}
	return queryName;
	
}
function getThisQuery(element,siblings){
	var newsiblings=[];
	var index=0;
  for(var i=0;i<siblings.length;i++){
	 if(siblings[i].tagName&&siblings[i].tagName.toLowerCase()==element.tagName.toLowerCase()){
		 newsiblings[index++]=siblings[i];
	 }
	  
  }
	siblings=newsiblings;
	
	
	var currentQuery="";
	if(siblings.length==1){
		var element=siblings[0];
		var classStr=element.getAttribute("class");
		var testCss=""; 
		if(classStr){
			testCss=classStr.replace(/\s*/g,"");
		}
		
		if(classStr&&testCss){
			  currentQuery=element.tagName.toLowerCase();
			var strs=classStr.split(" ");
			for(var i=0;i<strs.length;i++){
				  currentQuery+="."+strs[i];
			}
			
		}else{
			currentQuery=element.tagName.toLowerCase();
		}
		
	}else{
		var arrayList=[];
		var classStr=element.getAttribute("class");
		var testCss=""; 
		if(classStr){
			testCss=classStr.replace(/\s*/g,"");
		}
		var currentClass=[];
		if(classStr&&testCss){
			currentQuery=element.tagName.toLowerCase();
			var once=true;
			for(var i=0;i<siblings.length;i++){
				if(siblings[i].tagName&&siblings[i].tagName.toLowerCase()!=element.tagName.toLowerCase()){
					continue;
				}
				if(!siblings[i].tagName){
					continue;
				}
				var hehehe=siblings[i].getAttribute("class")||"";
				
					var strs=hehehe.split(" ");
					if(once){
						currentClass=strs;
						once=false;
					}else{
						currentClass=currentClass.filter(v => strs.includes(v))
					}
			}
			
			var strs=classStr.split(" ");
			var appendSonClss="";
			for(var i=0;i<strs.length;i++){
				if(currentClass.indexOf(strs[i])>=0){
					continue;
				}
			appendSonClss+="."+strs[i];
			}
			if(appendSonClss){
				currentQuery+=appendSonClss;
			}else{
				
				var ix = 1;//在nodelist中的位置,且每次点击初始化
				for(var i=0;i<siblings.length;i++){
					var sibling = siblings[i];
					//如果这个元素是siblings数组中的元素,则执行递归操作
					if (sibling == element) {
					//var parentQuery=realsQuery(element.parentNode);
						currentQuery=element.tagName.toLowerCase() + ‘:nth-child(‘ + ix+ ‘)‘;
						//如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加
					} else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) {
						ix++;
					}
				}
			}
				
		}else{
			var ix = 1;//在nodelist中的位置,且每次点击初始化
			for(var i=0;i<siblings.length;i++){
				var sibling = siblings[i];
				//如果这个元素是siblings数组中的元素,则执行递归操作
				if (sibling == element) {
				//var parentQuery=realsQuery(element.parentNode);
					currentQuery=element.tagName.toLowerCase() + ‘:nth-child(‘ + ix+ ‘)‘;
					//如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加
				} else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) {
					ix++;
				}
			}
			
		}
		
		
		
	}
	return currentQuery;
	
}
原文:https://www.cnblogs.com/developer-ios/p/10627861.html