博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dom get selector
阅读量:5280 次
发布时间:2019-06-14

本文共 10092 字,大约阅读时间需要 33 分钟。

function realsQuery(element) {

if(!element){
return "";
}
var currentQuery="";
if (element.id !== "") {
currentQuery='#' + element.id;
}else{
currentQuery= getSimpleQuery(element,currentQuery);
console.log("simpleQuery:"+currentQuery);
/**currentQuery="";
currentQuery= getDetailsQuery(element,currentQuery);
console.log("detailsQuery:"+currentQuery);
currentQuery="";
currentQuery= getTypeQuery(element,currentQuery);
console.log("TypeQuery:"+currentQuery);**/
}
return currentQuery;

};

function getSimpleQuery(element,currentQuery){
var siblings = element.parentNode.childNodes;
currentQuery=getThisQuery(element,siblings);
currentQuery=getParentQuery(element,currentQuery);
return currentQuery;
}
function getDetailsQuery(element,currentQuery){
var siblings = element.parentNode.childNodes;
currentQuery=getThisQueryD(element,siblings);
currentQuery=getParentQueryD(element,currentQuery);
return currentQuery;
}

function getTypeQuery(element,currentQuery){

var siblings = element.parentNode.childNodes;
currentQuery=getThisQueryT(element,siblings);
currentQuery=getParentQueryT(element,currentQuery);
return 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||"").replace(/(^\s*)|(\s*$)/g, "");
if(iiid){
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;
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];
}
}
var currentQuery="";
if(newsiblings.length==1){
var classStr=element.getAttribute("class");
classStr=(classStr||"").replace(/(^\s*)|(\s*$)/g, "").replace(/\s{2,}/g," ");
/**if(classStr){
currentQuery=element.tagName.toLowerCase();
var strs=classStr.split(" ");
for(var i=0;i<strs.length;i++){
currentQuery+="."+strs[i];
}
}else{
currentQuery=element.tagName.toLowerCase();
}**/
currentQuery=element.tagName.toLowerCase();
}
else{
var arrayList=[];
var classStr=element.getAttribute("class");
classStr=(classStr||"").replace(/(^\s*)|(\s*$)/g, "").replace(/\s{2,}/g," ");
var currentClass=[];
if(classStr){
currentQuery=element.tagName.toLowerCase();
var once=true;
for(var i=0;i<newsiblings.length;i++){
if(newsiblings[i].tagName&&newsiblings[i].tagName.toLowerCase()!=element.tagName.toLowerCase()){
continue;
}
if(!newsiblings[i].tagName){
continue;
}
var hehehe=newsiblings[i].getAttribute("class")||"";
hehehe=hehehe.replace(/(^\s*)|(\s*$)/g, "").replace(/\s{2,}/g," ");
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 = 0;//在nodelist中的位置,且每次点击初始化
for(var i=0;i<siblings.length;i++){
var sibling = siblings[i];
//如果这个元素是siblings数组中的元素,则执行递归操作
if (sibling == element) {
//var parentQuery=realsQuery(element.parentNode);
ix++;
currentQuery=element.tagName.toLowerCase() + ':nth-child(' + ix+ ')';
//如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加
} else if (sibling.nodeType == 1) {
ix++;
}
}
}
}else{
var ix = 0;//在nodelist中的位置,且每次点击初始化
for(var i=0;i<siblings.length;i++){
var sibling = siblings[i];
//如果这个元素是siblings数组中的元素,则执行递归操作
if (sibling == element) {
//var parentQuery=realsQuery(element.parentNode);
ix++;
currentQuery=element.tagName.toLowerCase() + ':nth-child(' + ix+ ')';
//如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加
} else if (sibling.nodeType == 1) {
ix++;
}
}
}
}
return currentQuery;
}

function getParentQueryT(element,queryName){
var that=element.parentNode;
if(that!=null){
if(that.tagName.toLowerCase()=="body"){
queryName="body > "+queryName;
}else{
var iiid=(that.id||"").replace(/(^\s*)|(\s*$)/g, "");
if(iiid){
queryName="#"+iiid+" > "+queryName;
}else{
var siblings=null
if(that.parentNode){
siblings=that.parentNode.childNodes;
}else{
siblings=[that];
}
var currentName=getThisQueryT(that,siblings);
queryName=currentName+" > "+queryName;
if(that!=null){
queryName=getParentQueryT(that,queryName);
}
}
}
}
return queryName;
}
function getThisQueryT(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(newsiblings.length==1){
var classStr=element.getAttribute("class");
classStr=(classStr||"").replace(/(^\s*)|(\s*$)/g, "").replace(/\s{2,}/g," ");
/**if(classStr){
currentQuery=element.tagName.toLowerCase();
var strs=classStr.split(" ");
for(var i=0;i<strs.length;i++){
currentQuery+="."+strs[i];
}
}else{
currentQuery=element.tagName.toLowerCase();
}**/
currentQuery=element.tagName.toLowerCase();
}
else{
var arrayList=[];
var classStr=element.getAttribute("class");
classStr=(classStr||"").replace(/(^\s*)|(\s*$)/g, "").replace(/\s{2,}/g," ");
var currentClass=[];
if(classStr){
currentQuery=element.tagName.toLowerCase();
var once=true;
for(var i=0;i<newsiblings.length;i++){
if(newsiblings[i].tagName&&newsiblings[i].tagName.toLowerCase()!=element.tagName.toLowerCase()){
continue;
}
if(!newsiblings[i].tagName){
continue;
}
var hehehe=newsiblings[i].getAttribute("class")||"";
hehehe=hehehe.replace(/(^\s*)|(\s*$)/g, "").replace(/\s{2,}/g," ");
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 = 0;//在nodelist中的位置,且每次点击初始化
for(var i=0;i<siblings.length;i++){
var sibling = siblings[i];
//如果这个元素是siblings数组中的元素,则执行递归操作
if (sibling == element) {
//var parentQuery=realsQuery(element.parentNode);
ix++;
currentQuery=element.tagName.toLowerCase() + ':nth-of-type(' + ix+ ')';
//如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加
} else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) {
ix++;
}
}
}
}else{
var ix = 0;//在nodelist中的位置,且每次点击初始化
for(var i=0;i<siblings.length;i++){
var sibling = siblings[i];
//如果这个元素是siblings数组中的元素,则执行递归操作
if (sibling == element) {
//var parentQuery=realsQuery(element.parentNode);
ix++;
currentQuery=element.tagName.toLowerCase() + ':nth-of-type(' + ix+ ')';
//如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加
} else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) {
ix++;
}
}
}
}
return currentQuery;
}

function getParentQueryD(element,queryName){
var that=element.parentNode;
if(that!=null){
if(that.tagName.toLowerCase()=="body"){
queryName="body > "+queryName;
}else{
var iiid=(that.id||"").replace(/(^\s*)|(\s*$)/g, "");
if(iiid){
queryName="#"+iiid+" > "+queryName;
}else{
var siblings=null
if(that.parentNode){
siblings=that.parentNode.childNodes;
}else{
siblings=[that];
}
var currentName=getThisQueryD(that,siblings);
queryName=currentName+" > "+queryName;
if(that!=null){
queryName=getParentQueryD(that,queryName);
}
}
}
}
return queryName;
}
function getThisQueryD(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(newsiblings.length==1){
var classStr=element.getAttribute("class");
classStr=(classStr||"").replace(/(^\s*)|(\s*$)/g, "").replace(/\s{2,}/g," ");
if(classStr){
currentQuery=element.tagName.toLowerCase();
var strs=classStr.split(" ");
for(var i=0;i<strs.length;i++){
currentQuery+="."+strs[i];
}
}else{
currentQuery=element.tagName.toLowerCase();
}/****/
//currentQuery=element.tagName.toLowerCase();
}
else{
var arrayList=[];
var classStr=element.getAttribute("class");
classStr=(classStr||"").replace(/(^\s*)|(\s*$)/g, "").replace(/\s{2,}/g," ");
var currentClass=[];
if(classStr){
currentQuery=element.tagName.toLowerCase();
var once=true;
for(var i=0;i<newsiblings.length;i++){
if(newsiblings[i].tagName&&newsiblings[i].tagName.toLowerCase()!=element.tagName.toLowerCase()){
continue;
}
if(!newsiblings[i].tagName){
continue;
}
var hehehe=newsiblings[i].getAttribute("class")||"";
hehehe=hehehe.replace(/(^\s*)|(\s*$)/g, "").replace(/\s{2,}/g," ");
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 = 0;//在nodelist中的位置,且每次点击初始化
for(var i=0;i<siblings.length;i++){
var sibling = siblings[i];
//如果这个元素是siblings数组中的元素,则执行递归操作
if (sibling == element) {
//var parentQuery=realsQuery(element.parentNode);
ix++;
currentQuery=element.tagName.toLowerCase() + ':nth-of-type(' + ix+ ')';
//如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加
} else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) {
ix++;
}
}
}
}else{
var ix = 0;//在nodelist中的位置,且每次点击初始化
for(var i=0;i<siblings.length;i++){
var sibling = siblings[i];
//如果这个元素是siblings数组中的元素,则执行递归操作
if (sibling == element) {
//var parentQuery=realsQuery(element.parentNode);
ix++;
currentQuery=element.tagName.toLowerCase() + ':nth-of-type(' + ix+ ')';
//如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加
} else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) {
ix++;
}
}
}
}
return currentQuery;
}

 

转载于:https://www.cnblogs.com/developer-ios/p/10627861.html

你可能感兴趣的文章
axure学习点
查看>>
WPF文本框只允许输入数字[转]
查看>>
dom4j 通用解析器,解析成List<Map<String,Object>>
查看>>
第一个项目--用bootstrap实现美工设计的首页
查看>>
使用XML传递数据
查看>>
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>
模板设计模式的应用
查看>>
实训第五天
查看>>
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>