如何展开和折叠使用 aria-expanded 属性制作的 div?

Posted

技术标签:

【中文标题】如何展开和折叠使用 aria-expanded 属性制作的 div?【英文标题】:How to expand and collapse a div made using aria-expanded attribute? 【发布时间】:2021-09-13 06:17:45 【问题描述】:

我基本上是在尝试编写一个可以使用 javascript 扩展折叠的 <div> 的脚本。在使用前端部分时,我可以通过单击它来折叠和展开 <div>,但是对于 JavaScript,如果我尝试 element.click() 甚至 element.ariaExpanded = "true",它就不起作用。

我附上点击 <div> 之前和之后的代码,突出显示代码中的差异。

我尝试了几件事,包括

var outerDiv = document.getElementsByClassName("section--section--BukKG");
outerDiv[0].ariaExpanded = "true";
outerDiv[0].children[0].ariaExpanded = "true";
outerDiv[0].click();
document.querySelectorAll('.section--section-chevron--tJ4mD')[0].classList.remove('udi-angle-down');
document.querySelectorAll('.section--section-chevron--tJ4mD')[0].classList.add('udi-angle-up');

【问题讨论】:

根据MDN "The ariaExpanded property of the Element interface reflects the value of the aria-expanded attribute, which indicates whether a grouping element owned or controlled by this element is expanded or collapsed." - 我不相信这会修改元素本身的状态 【参考方案1】:

由于您没有包含任何 html 标记,因此以下是原始的粗略复制。您实际上是在尝试切换 DIV 元素的可见性,并使用 ARIA 标签指示该元素是否为expanded

为此,您可以使用 CSS 中的 aria-expanded 属性来控制父容器中子对象的可见性。通过将属性 aria-expanded 设置为 true 或 false 将调用相关的 css 规则来显示/隐藏子项。

const bool=(v)=>v=='true' ? true : false;

const clickhandler=function(e)
  this.setAttribute('aria-expanded', !bool(this.ariaExpanded) )


document.querySelectorAll('div.section--section--bukkg').forEach(div=>div.addEventListener('click',clickhandler) );
.section--section--bukkg
  transition:ease-in-out 250ms all;
  border:1px solid red;
  padding:1rem;
  margin:1rem;


[aria-expanded="false"] .section--section--heading
  display:none;

[aria-expanded="true"] .section--section--heading
  display:block;
<div class='section--section--bukkg' data-purpose='section-panel' aria-expanded='false'>
  <div class='section--section--heading' role='button' tabindex=0 data-purpose='section-heading'>
    <div class='section-title' data-purpose='section-panel'>A title of some sort 1</div>
    <span class='section-chevron'>Some content in a SPAN 1</span>
    <div class='font-text-xs'>teeney weeney text 1</div>
  </div>
</div>

<div class='section--section--bukkg' data-purpose='section-panel' aria-expanded='false'>
  <div class='section--section--heading' role='button' tabindex=1 data-purpose='section-heading'>
    <div class='section-title' data-purpose='section-panel'>A title of some sort 2</div>
    <span class='section-chevron'>Some content in a SPAN 2</span>
    <div class='font-text-xs'>teeney weeney text 2</div>
  </div>
</div>

<div class='section--section--bukkg' data-purpose='section-panel' aria-expanded='false'>
  <div class='section--section--heading' role='button' tabindex=2 data-purpose='section-heading'>
    <div class='section-title' data-purpose='section-panel'>A title of some sort 3</div>
    <span class='section-chevron'>Some content in a SPAN 3</span>
    <div class='font-text-xs'>teeney weeney text 3</div>
  </div>
</div>

【讨论】:

以上是关于如何展开和折叠使用 aria-expanded 属性制作的 div?的主要内容,如果未能解决你的问题,请参考以下文章

IOS 上的可访问性问题。配音未检测到 aria-expanded

如何使用自动布局展开和折叠 UIView

使用约束的 UIImageView 的折叠和展开动画

如何将展开和折叠列表行与 Core Data 元素一起使用?

如何使用 Javascript 将 HTML 页面中的 XML 显示为可折叠和可展开的树? [关闭]

如何使用 begin-endUpdates() 和多个自定义单元格展开/折叠 UITableViewCells?