javascript - Javascript。通过 aria-label 和 class 获取所有元素
问题描述
我正在尝试计算 Outlook 中的邮件数量(我正在工作),但是对于未读邮件,我正在寻找可以找到“No leído”(未读)的 aria-label,我尝试使用这个数组方法然后返回他的长度,但我不工作,有什么建议吗?
function getMailElementsByClass(document_root) {
var elements = document_root.getElementsByClassName("_1xP-XmXM1GGHpRKCCeOKjP");
var mailsRead = 0;
var unRead = [];
for(var i=0; i<elements.length; i++) {
console.log(elements[i]);
mailsRead++;
}
Array.from(elements).forEach(v => v.getAttribute('aria-label').startsWith('No Leído') ? unRead.push(v) : v);
return mailsRead + ' Mails registrados! \nMails no leídos: ' + unRead.length;
}
解决方案
.getElementsByClassName()
是一个 25 年以上的 API,虽然仍然是有效的代码,但应该避免使用它,因为它返回一个“活动”节点列表并具有性能影响(尤其是在循环它时)。而是使用.querySelectorAll()
,它接受任何有效的 CSS 选择器。此外,您可以查询您寻找的类和具有您寻找的以您想要的方式开始的属性的该类的元素。
仅供参考:以某些字符开头的属性值的 CSS 语法是^=
. 更多关于属性选择器的信息。
整体代码要简单得多,甚至不需要循环。
function getUnreadMailElements(doc) {
let unRead = doc.querySelectorAll("._1xP-XmXM1GGHpRKCCeOKjP[aria-label^='No Leído']");
return mailsRead + ' Mails registrados! \nMails no leídos: ' + unRead.length;
}
推荐阅读
- ruby-on-rails - 为什么使用 Webp-ffi gem 上传文件时出错?
- flutter - Flutter:在 List 内嵌套 Map 的条件
- javascript - 如何在我的节点应用程序中正确使用链填充方法?
- elixir - 根据一个 PubSub 事件更新所有 Phoenix LiveView 套接字
- c++ - 编译 CUDA cuSolver 特征值示例时出现编译错误
- android - 覆盖中带有 wrap_content 的 TextView 未扩展到完整内容宽度
- google-rich-snippets - 谷歌评论片段 VS 综合评分
- input - 如何选择表单中的所有输入
- image - 无法将 docker 镜像拉到代理后面
- typescript - 使用泛型类型和联合类型