Element: ariaOwnsElements 屬性

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

Element 介面的 ariaOwnsElements 屬性是一個數組,其中包含定義應用到父元素及其子元素之間的視覺、功能或上下文關係的元素。當 DOM 層級結構無法用於表示這種關係,並且輔助技術無法直接獲取時,就會使用此屬性。

aria-owns 主題包含了關於屬性和屬性如何使用的更多資訊。

HTMLElement 的子類陣列。

讀取時,返回的陣列是靜態的且只讀的。寫入時,將複製分配的陣列:之後對陣列的更改不會影響屬性的值。

描述

此屬性是使用 aria-owns 屬性來指示元素所有權的一種靈活的替代方案。與 aria-owns 不同,分配給此屬性的元素不必具有 id 屬性。

當定義了 aria-owns 屬性時,此屬性會反映該屬性的值,但僅限於匹配有效作用域內元素的已列出的引用 id 值。如果設定了此屬性,則相應的屬性會被清除。有關反映的元素引用和作用域的更多資訊,請參閱反映的屬性指南中的 反映的元素引用

示例

獲取被擁有的元素

此示例演示了 aria-owns 屬性和屬性的用法。

該程式碼在單獨且非巢狀的 <div> 元素中定義了一個選單及其關聯的子選單。由於這些元素沒有巢狀,DOM 無法捕捉選單和子選單之間的所有權關係。在這裡,我們透過 aria-owns 屬性將此資訊提供給可訪問性工具,但也可以透過反映的屬性來實現。

請注意,我們可以構建一個子選單巢狀在其中的選單:該示例是為了方便演示需要定義關係的場景而刻意設計的。

HTML

HTML 定義了選單的 <div> 元素,其中 id=parentMenu,子選單的 id="subMenu1"。我們在中間添加了一個 <div>,以便更清楚地表明 DOM 中沒有定義直接的所有權模型。

父選單 <div> 包含屬性 aria-owns="subMenu1" 來建立此所有權關係。

html
<div class="menu" id="parentMenu" role="menubar" aria-owns="subMenu1">
  Top level menu (hover over)
</div>

<div>Some other element</div>

<div class="submenu" id="subMenu1" role="menu">
  <a href="#" role="menuitem">Menu item 1</a>
  <a href="#" role="menuitem">Menu item 2</a>
  <a href="#" role="menuitem">Menu item 3</a>
</div>

CSS

CSS 為選單和子選單設定樣式,並在滑鼠懸停在選單上時顯示子選單。

css
.menu {
  position: relative;
  display: inline-block;
  color: purple;
}

.submenu {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 6px 14px 0px rgb(0 0 0 / 0.2);
  z-index: 1;
  top: 20px;
  left: 0;
}

.menu:hover ~ .submenu {
  display: block;
}

.submenu a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
}

.submenu a:hover {
  background-color: #f1f1f1;
}

JavaScript

程式碼首先檢查 ariaOwnsElements 是否受支援。如果受支援,我們將記錄該屬性、屬性中的元素以及每個元素的 id 值。

js
// Feature test for ariaOwnsElements
if ("ariaOwnsElements" in Element.prototype) {
  const parentMenu = document.querySelector("#parentMenu");
  log(`parentMenu.getAttribute(): ${parentMenu.getAttribute("aria-owns")}`);
  log(`parentMenu.ariaOwnsElements: ${parentMenu.ariaOwnsElements}`);
  parentMenu.ariaOwnsElements?.forEach((elem) => {
    log(`  id: ${elem.id}`);
  });
} else {
  log("element.ariaOwnsElements: not supported by browser");
}

結果

執行程式碼的結果如下所示。日誌顯示,使用 aria-owns 屬性定義的關係已反映在 ariaOwnsElements 屬性中(陣列中的元素與屬性元素引用匹配)。

規範

規範
無障礙富網際網路應用程式 (WAI-ARIA)
# dom-ariamixin-ariaownselements

瀏覽器相容性

另見