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. 解决vm安装centos7网络无法启动问题

    采用以下命令: systemctl stop NetworkManager systemctl disable NetworkManager

  2. Hibernate的Session的get()和load()方法区别

    hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别. get Session接口提供了4个重载的get方法,分别通过“持 ...

  3. 大数据学习——hive的sql练习题

    ABC三个hive表 每个表中都只有一列int类型且列名相同,求三个表中互不重复的数 create table a(age int) row format delimited fields termi ...

  4. A. Light Bulb

    A. Light Bulb Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 32768KB   64-bit integer IO f ...

  5. php增加

    <?php$lname = $_POST['lname'];$name = $_POST['name'];$number = $_POST['number'];$dod = $_POST['do ...

  6. nginx的详解(三)

    6.禁止访问某个文件或目录1)禁止访问以txt或doc结尾的文件location ~* \.(txt|doc)${root /data/www/wwwroot/linuxtone/test;deny ...

  7. 30分钟学会如何使用Shiro(转自:http://www.cnblogs.com/learnhow/p/5694876.html)

    本篇内容大多总结自张开涛的<跟我学Shiro>原文地址:http://jinnianshilongnian.iteye.com/blog/2018936 我并没有全部看完,只是选择了一部分 ...

  8. Python之转换py文件为无需依赖python环境的exe文件的方法

    在日常工作中,使用python脚本开发快速敏捷,但是其代码是可见的,而且充分的依赖python开发环境.为了达到保护我们源码的目的,或者不依赖python开发环境使用python脚本,将其转换成可以直 ...

  9. 【noip】noip201503求和(题解可能不完美,但绝对详细)

    3. 求和 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 题目描述   一条狭长的纸带被均匀划分出了n个格子,格子编号从1到n.每个格子 ...

  10. Codevs 2956 排队问题

    2956 排队问题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 有N个学生去食堂,可教官规定:必须2人或3人组成一组,求有多少种不 ...