31 lines
970 B
TypeScript
31 lines
970 B
TypeScript
import { onBeforeUnmount, onMounted } from 'vue';
|
|
|
|
const jumperSelector = '.t-pagination__jump input';
|
|
|
|
function labelPaginationJumpers(root: ParentNode) {
|
|
root.querySelectorAll<HTMLInputElement>(jumperSelector).forEach((input) => {
|
|
if (!input.getAttribute('aria-label')) input.setAttribute('aria-label', '跳转页码');
|
|
});
|
|
}
|
|
|
|
export function useTDesignAccessibility() {
|
|
let observer: MutationObserver | undefined;
|
|
|
|
onMounted(() => {
|
|
labelPaginationJumpers(document);
|
|
observer = new MutationObserver((records) => {
|
|
records.forEach((record) => {
|
|
record.addedNodes.forEach((node) => {
|
|
if (node instanceof Element) {
|
|
if (node.matches(jumperSelector)) node.setAttribute('aria-label', '跳转页码');
|
|
labelPaginationJumpers(node);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
observer.observe(document.body, { childList: true, subtree: true });
|
|
});
|
|
|
|
onBeforeUnmount(() => observer?.disconnect());
|
|
}
|