javascript 按类名获取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 按类名获取相关的知识,希望对你有一定的参考价值。

const { JSDOM } = require("jsdom");
const { document } = new JSDOM(`
  <div id="root" class='a'>
      <div class='a' id='a-1'>
          <div class='a' id='a-2'>
               <div class='b' id='d-1'></div>  <--
          </div>
          <div class='c' id='c-1'>
              <div class='a' id='a-3'>
                   <div class='d' id='d-2'></div>  <--
              </div>
          </div>
      </div>
  </div>
`).window;
const getIds = (elements=[]) => Array.from(elements).map(x => x.id);
/*

className
classList
children

*/

function hasClass(element, className) {
  return Object.values(element.classList).includes(className);
}

function getChildrenWithClassName(element, className, results) {
  if(hasClass(element, className)) {
    results.push(element);
  }
  for(const child of element.children) {
    getChildrenWithClassName(child, className, results);
  }
}

function getChildrenWithHierarchy(element, hierarchyList, count, results) {
  if (hasClass(element, hierarchyList[count])) {
    console.log("hasClass", hierarchyList[count]);
    if (count === hierarchyList.length-1) {
      results.push(element);
      
    } else {
      count++;
    }
  } else {
    return;
  }
  
  for(const child of element.children) {
    getChildrenWithHierarchy(child, hierarchyList, count, results);
  }
}

function getByClassName(element, className) {
  let results = [];
  getChildrenWithClassName(element, className, results);
  
  return results;
}


const rootNode = document.getElementById('root');
// console.log("results", getIds(getByClassName(rootNode, 'a')));



function getByClassNameHierarchy(element, hierarchy) {
  const hierarchyList = hierarchy.split('>');
  let results = [];
  getChildrenWithHierarchy(element, hierarchyList, 0, results);
  return results;
}


console.log("results", getIds(getByClassNameHierarchy(rootNode, 'a>a')));
// a-1, a-2
// a>b>a>b
// 
// console.log("results", getIds(getByClassNameHierarchy(rootNode, 'a>b>a>d')));

以上是关于javascript 按类名获取的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 按类名获取元素

在 KineticJS 中按类名从阶段获取多个对象

如果类名是数字,则无法按类名获取元素

在 UI 中按渲染顺序获取类名

html 按类名获取元素

使用 Elm.Browser.Dom 按类名获取元素