Javascript。按aria标签和类获取所有元素

Javascript。按aria标签和类获取所有元素,javascript,sorting,dom,Javascript,Sorting,Dom,我试图计算outlook中的邮件数量(我可以工作),但对于未读邮件,我正在寻找aria标签,在那里我可以找到“No leído”(未读),我尝试使用此数组方法,然后返回他的长度,但我不工作,有什么建议吗 function getMailElementsByClass(document_root) { var elements = document_root.getElementsByClassName("_1xP-XmXM1GGHpRKCCeOKjP"); v

我试图计算outlook中的邮件数量(我可以工作),但对于未读邮件,我正在寻找aria标签,在那里我可以找到“No leído”(未读),我尝试使用此数组方法,然后返回他的长度,但我不工作,有什么建议吗

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;
}
函数getMailElementsByClass(文档根目录){ var elements=document_root.getElementsByClassName(“_1xP-xmxmxm1gghprkceokjp”); var-mailsRead=0; var未读=[]; 对于(var i=0;iv.getAttribute('aria-label').startsWith('No Leído'))?未读的.push(v):v); return mailsRead+“Mails registerdos!\n邮件无leiídos:”+未读长度; }
.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;
}

您能使用
查询选择器吗?如果是这样,请尝试使用
”。_1xP-xmxmxm1gghprkceokjp[aria label]”
。我是否也可以使用它来计算读取的邮件总数?使用没有aria标签的相同方法?