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 按类名获取元素