Я пытаюсь написать скрипт, который проверяет DOM на наличие элементов с определенными атрибутами;Если они существуют, утешите атрибут и значение;В частности, атрибуты role
и aria
.
<body aria-live="assertive" aria-checked="true">
<form role="search">
<input type="search" name="q" placeholder="Search query" aria-label="Search through site content">
<input type="submit" value="Go!">
</form>
</body>
Приведенная выше разметка должна давать:
Body aria-live: "assertive", aria-checked:"true"
Form role: "search"
Input aria-label: "Search through site content"
И это скрипт:
document.addEventListener('DOMContentLoaded', function (event) {
var jsUcFirst = (str) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
document.querySelectorAll('*').forEach(function (node) {
if (node.hasAttribute('role') || checkForAriaFunc(node)) {
console.dir(document.body.attributes)
console.log(
`${jsUcFirst(node.tagName)} role: ${node.getAttribute('role')}, aria: ${checkForAriaFunc(node)}`
)
}
});
})
Как вы можете видеть в операторе if, я застрял в том, как проверить aria-*
с checkForAriaFunc
в качестве функции-заполнителя / псевдокода.
Я утешил dir'ed document.body
и обнаружил, что есть свойство attributes
с именем NamedNodeMap
, которое содержит следующее:
![enter image description here](https://i.stack.imgur.com/p9dCi.png)
Итак, как лучше всего использовать метод, чтобы я мог проверить, есть ли у элемента какие-либо теги arias
и, если да, распечатать их все?Заранее спасибо!
Обновление По предложению Маркуса я попробовал это:
function ariaChecker(el) {
Object.keys(el.attributes).map((property) => {
if (property.includes('aria')) {
console.log(property);
}
})
}
Но возвращаюсь неопределенным!
Обновление Итак, принимая то, что рекомендовал guest271314, я попытался написать свою собственную функцию, используя filter
:
function ariaChecker(el) {
return Object.entries(el.attributes).filter((property) => {
var newarr = []
if (property.includes('aria')) newarr.push(property.toString())
return newarr
}).join(' ')
}
Но я получаю:
![enter image description here](https://i.stack.imgur.com/trnDW.png)