gpt4 book ai didi

javascript - 如何将 aria 属性设置为 highcharts 工具提示

转载 作者:行者123 更新时间:2023-12-03 02:09:43 25 4
gpt4 key购买 nike

我有一个用 React 应用程序编写的图表(Highcharts),带有自定义格式的工具提示;但是,当通过点“选项卡”时,屏幕阅读器不会宣布工具提示内容。

我编写了一些 JavaScript 来解决我的问题,并在 mouseOut 上公布工具提示,因为它们应该在 DOM 中创建不必要的元素的情况下公布。

point: {
events: {
mouseOut: function () {
let ariaText = this.category + ', Projected Savings: $ ' + this.projectedSavingsFormatted + ', Target Savings: ' + targetSavingsFormatted + ', Time to Achieve: ' + this.timeToAcheive + ' months';
let tooltips = document.querySelectorAll('div.highcharts-tooltip')[0];
tooltips.getElementsByTagName('span')[0].setAttribute('role', 'tooltip');
tooltips.getElementsByTagName('span')[0].setAttribute('aria-live', 'assertive');
tooltips.getElementsByTagName('span')[0].setAttribute('aria-label', ariaText);
}
}
}

我的问题是:我该如何清理它?必须有一种更有效的方法来编写这个函数。

最佳答案

如果您只想获取单个元素,请使用 querySelector(…)而不是 querySelectorAll(…)[0]:

let tooltips = document.querySelectorAll('div.highcharts-tooltip')[0];
// becomes:
let tooltips = document.querySelector('div.highcharts-tooltip');

但是,根据您的代码,似乎不需要选择 div - 如果您只想要第一个 span,请立即选择它,而不存储父节点:

let tooltip = document.querySelector('div.highcharts-tooltip span');
tooltip.setAttribute('role', 'tooltip');
tooltip.setAttribute('aria-live', 'assertive');
tooltip.setAttribute('aria-label', ariaText);

为了节省一些字符并希望使长字符串更清晰,您可以使用 template literals而不是链接 '...' + ... + '...':

let ariaText = this.category + ', Projected Savings: $ ' + this.projectedSavingsFormatted + ', Target Savings: ' + targetSavingsFormatted + ', Time to Achieve: ' + this.timeToAcheive + ' months';
// becomes:
let ariaText = `${this.category}, Projected Savings: $ ${this.projectedSavingsFormatted}, Target Savings: ${targetSavingsFormatted}, Time to Achieve: ${this.timeToAcheive} months`;
// notice the backticks (``) instead of quotes ('')

所以,你的函数可以变成:

point: {
events: {
mouseOut: function () {
let ariaText = `${this.category}, Projected Savings: $ ${this.projectedSavingsFormatted}, Target Savings: ${targetSavingsFormatted}, Time to Achieve: ${this.timeToAcheive} months`;
let tooltip = document.querySelector('div.highcharts-tooltip span');
tooltip.setAttribute('role', 'tooltip');
tooltip.setAttribute('aria-live', 'assertive');
tooltip.setAttribute('aria-label', ariaText);
}
}
}

关于javascript - 如何将 aria 属性设置为 highcharts 工具提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49633146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com