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