首页 > 其他 > 详细

dom get selector

时间:2019-03-30 16:58:31      阅读:118      评论:0      收藏:0      [点我收藏+]

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;

}

dom get selector

原文:https://www.cnblogs.com/developer-ios/p/10627861.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!