dom get selector
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的更多相关文章
- jQuery原生框架-----------------dom操作
// 扩展DOM操作方法jQuery.fn.extend({ // 设置或者获取元素的内容 html: function( html ) { /* * 实现思路: * 1.不传参,返回第一个元素的内容 ...
- DOM扩展札记
Selector API HTML5 DOM扩展 Element Traversal规范 Selector API 众多JavaScript库中,最常用的一个功能就是根据css选择符选择与某个模式匹配 ...
- javascript的api设计原则
前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块.系卤煮自己总结的一些经验和教训.本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来.很难做到 ...
- 分析一个类似于jquery的小框架 (2)
核心构造函数 (function ( window, undefined ) { // 定义Itcast构造函数 function Itcast ( selector ) { return new I ...
- python Web开发框架-Django (2)
接上篇文章,介绍一些实用的技巧和注意点.首次用MarkDown编辑,感觉行空隙太大,不是那么好看. GET/POST 前后端会有数据交互,使用JQuery来实现get/post请求 GET 方法1:通 ...
- 【zepto学习笔记01】核心方法$()
前言 我们移动端基本使用zepto了,而我也从一个小白变成稍微靠谱一点的前端了,最近居然经常要改到zepto源码但是,我对zepto不太熟悉,其实前端水准还是不够,所以便私下偷偷学习下吧,别被发现了 ...
- 没有jquery的时候,你看看这个
vjs var br = (function() { var ua = navigator.userAgent.toLowerCase(); browser = { iPhone: /iphone/. ...
- Chrome控制台 JS调试的一些小技巧
$ $_命令返回最近一次表达式执行的结果,功能跟按向上的方向键再回车是一样的,但它可以做为一个变量使用在你接下来的表达式中. $0~$4则代表了最近5个你选择过的DOM节点.在页面右击选择审查元素,然 ...
- Zepto源码
// Zepto.js // (c) 2010-2016 Thomas Fuchs // Zepto.js may be freely distributed under the MIT licens ...
随机推荐
- PHP 微信分享(及二次分享)
js部分: <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> &l ...
- ES6(Module模块化)
模块化 ES6的模块化的基本规则或特点: 1:每一个模块只加载一次, 每一个JS只执行一次, 如果下次再去加载同目录下同文件,直接从内存中读取. 一个模块就是一个单例,或者说就是一个对象: 2:每一个 ...
- luogu2569 [SCOI2010]股票交易
题解看这里 #include <iostream> #include <cstring> #include <cstdio> using namespace std ...
- Oracle审计相关对象的迁移
目录 创建审计用的表空间 在线迁移 查询结果 在日常的数据库维护中,经常出现因为数据库登录审计的功能启动,导致system表空间被用满.从而出现异常,一般建议把aud$相关对象迁移到其他表空间,从而避 ...
- 对比使用Charles和Fiddler两个工具及利用Charles抓取https数据(App)
对比使用Charles和Fiddler两个工具及利用Charles抓取https数据(App) 实验目的:对比使用Charles和Fiddler两个工具 实验对象:车易通App,易销通App 实验结果 ...
- [android开放篇] wifi-direct接口网址
http://www.android-doc.com/guide/topics/connectivity/wifip2p.html
- [uiautomator篇][11]wifi
package com.softwinner.network.wifi; import android.content.Context; import android.content.Intent; ...
- Flutter 发布APK时进行代码/资源混淆的坑
Flutter 发布APK时进行代码/资源混淆的坑 @author ixenos 1. 关键点 proguard是Java的代码混淆工具,但是当用第三方库的时候,必须要告诉proguard不要检查,因 ...
- 【线段树查询区间最值】poj 3264 Balanced Lineup
#include<cstdio> #include<algorithm> using namespace std; ; struct Seg { int l,r,mi,ma; ...
- oracle 连接数据库以及查看当前用户、当前数据库实例
sql>show user;查看当前用户 sql>show parameter instance_name;查看当前数据库实例 例如: sqlplus登录:用sys用户登录(密码是1234 ...