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;

}

dom get selector的更多相关文章

  1. jQuery原生框架-----------------dom操作

    // 扩展DOM操作方法jQuery.fn.extend({ // 设置或者获取元素的内容 html: function( html ) { /* * 实现思路: * 1.不传参,返回第一个元素的内容 ...

  2. DOM扩展札记

    Selector API HTML5 DOM扩展 Element Traversal规范 Selector API 众多JavaScript库中,最常用的一个功能就是根据css选择符选择与某个模式匹配 ...

  3. javascript的api设计原则

    前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块.系卤煮自己总结的一些经验和教训.本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来.很难做到 ...

  4. 分析一个类似于jquery的小框架 (2)

    核心构造函数 (function ( window, undefined ) { // 定义Itcast构造函数 function Itcast ( selector ) { return new I ...

  5. python Web开发框架-Django (2)

    接上篇文章,介绍一些实用的技巧和注意点.首次用MarkDown编辑,感觉行空隙太大,不是那么好看. GET/POST 前后端会有数据交互,使用JQuery来实现get/post请求 GET 方法1:通 ...

  6. 【zepto学习笔记01】核心方法$()

    前言 我们移动端基本使用zepto了,而我也从一个小白变成稍微靠谱一点的前端了,最近居然经常要改到zepto源码但是,我对zepto不太熟悉,其实前端水准还是不够,所以便私下偷偷学习下吧,别被发现了 ...

  7. 没有jquery的时候,你看看这个

    vjs var br = (function() { var ua = navigator.userAgent.toLowerCase(); browser = { iPhone: /iphone/. ...

  8. Chrome控制台 JS调试的一些小技巧

    $ $_命令返回最近一次表达式执行的结果,功能跟按向上的方向键再回车是一样的,但它可以做为一个变量使用在你接下来的表达式中. $0~$4则代表了最近5个你选择过的DOM节点.在页面右击选择审查元素,然 ...

  9. Zepto源码

    // Zepto.js // (c) 2010-2016 Thomas Fuchs // Zepto.js may be freely distributed under the MIT licens ...

随机推荐

  1. HDU 3507 斜率优化 DP Print Article

    在kuangbin巨巨博客上学的. #include <iostream> #include <cstdio> #include <cstring> #includ ...

  2. Hive 执行sql命令报错

    Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyntaxExce ...

  3. 在windows下安装flex和bison、GCC

    学习Stellar-core 需要依赖项flex .bison .gcc三个依赖项 下载得网址:链接: https://pan.baidu.com/s/1mitCLcs 密码: 3jaj   通过 w ...

  4. 使用ANT将Android打包成Jar包

    本文主要实现使用ANT,将Android项目打包成jar,为方便其他项目使用. ANT可以去官网下载(http://ant.apache.org/) 先介绍打包的步骤,打包脚本下方贴出 步骤: 1,将 ...

  5. BZOJ 3925 [Zjoi2015]地震后的幻想乡 ——期望DP

    我们只需要考虑$\sum F(x)P(x)$的和, $F(x)$表示第x大边的期望,$P(x)$表示最大为x的概率. 经过一番化简得到$ans=\frac{\sum T(x-1)}{m+1}$ 所以就 ...

  6. py 爬取页面http://m.sohu.com 并存储

             usage()               opts,args = getopt.getopt(sys.argv[1:],                        usage( ...

  7. 洛谷P2498 [SDOI2012]拯救小云公主 【二分 + 并查集】

    题目 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等级1 ...

  8. 巴厘岛的雕塑 BZOJ 4069

    巴厘岛的雕塑 题解: 题意是要求分组使每组的和按位取或的值最小 那么考虑贪心,尽量使高位为0 于是枚举位置,从最高位枚举 假设当前枚举到第l位. 令 f[i][j] 表示前 i 个数分成 j 组,满足 ...

  9. Resin Thread Dump

    [2015/08/25 20:50:13.254] {ThreadLauncher2[ThreadPool[system]]-1} Thread Dump generated Tue Aug 25 2 ...

  10. Python入门---易错已错易混淆----知识点

    1.not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9 结果会输出啥? 根据优先级:(not 1) or (0 and 1) or (3 a ...