zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    广义后缀自动机模板
    HDU 5852 Intersection is not allowed! ( 2016多校9、不相交路径的方案、LGV定理、行列式计算 )
    BZOJ 4017 小 Q 的无敌异或 ( 树状数组、区间异或和、区间异或和之和、按位计贡献思想 )
    WHU 583 Palindrome ( 回文自动机 && 本质不同的回文串的个数 )
    HDU 5527 Too Rich ( 15长春区域赛 A 、可贪心的凑硬币问题 )
    HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
    HDU 5544 Ba Gua Zhen ( 2015 CCPC 南阳 C、DFS+时间戳搜独立回路、线性基 )
    HDU 5734 Acperience ( 数学公式推导、一元二次方程 )
    hihocoder 1251 Today is a rainy day ( 15年北京 C、暴力 )
    HDU 5113 Black And White ( 2014 北京区预赛 B 、搜索 + 剪枝 )
  • 原文地址:https://www.cnblogs.com/developer-ios/p/10627861.html
Copyright © 2011-2022 走看看