wordpress 如何从ul中的特定li中删除role =“link”属性

8mmmxcuj  于 12个月前  发布在  WordPress
关注(0)|答案(1)|浏览(141)

在WordPress中,我有一个菜单,其中有6个项目-项目1和项目4没有链接到页面并作为标题,但默认情况下,它们与其他项目一样被标记为role=“link”的可访问性。
如何删除这两个特定li的角色属性?
这是一个UL列表,其中大多数项目都有一个与之关联的URL,但其中两个项目没有。那些没有链接到任何地方,所以它们只是作为其他列表项目的标题。
例如

<ul>
    <li>Heading 1<a></a><li>
    <li>Link Item 1<a>some link path</a><li>
    <li>Link Item 2<a>some link path</a><li>
    <li>Link Item 3<a>some link path</a><li>
    <li>Heading 2<a></a><li>
    <li>Link Item 4<a>some link path</a><li>
    <li>Link Item 5<a>some link path</a><li>`

字符串
默认情况下,它们都有aria-role=link,但这对li 1和li 4来说是不正确的,所以我想从它们中删除这个角色。

<li class="emphasize-menu et_pb_menu_page_id-42615 menu-item 
    menu-item-type-custom menu-item-object-custom menu-item- 
    42615"><a role="link">CUSTOMERS</a></li>


我尝试了以下方法按类选择li项,然后删除该属性,但没有成功。
第一个月

relj7zay

relj7zay1#

您尝试的解决方法不起作用,因为<li>没有分配任何角色。<a>子级具有该角色。
此外,您不应该使用ID,因为它只适用于一个特定的菜单项。您应该将解决方法更广泛地应用于所有标题菜单项。

jQuery(function($){ $('.menu-item a[role=link]').removeAttribute("role"); });

// or, without hardening the absurd dependence on jQuery even more
document.querySelectorAll('.menu-item a[role=link]').forEach(a => a.removeAttribute('role');

字符串
我们可以完全忽略href属性是否存在,因为具有hrefa元素已经具有link角色。
这是一种解决方法,因为在呈现DOM之后再对其进行操作会降低性能,而且不稳定。
一个真实的修复方法是确保后端提供正确的、可缓存的HTML。但要提出这样的解决方案,需要知道所使用的主题,涉及插件和在像Wordpress这样的单体CMS中的覆盖。

剩余可访问性问题

请注意,即使此解决方法修复了角色问题,结构也不能充分表示分组,您可能会失败WCAG Success Criterion 1.3.1: Info and Relationships
下面是一个使分组关系机器可读的示例:

<ul>
  <li>Heading 1<a></a>
    <ul>
      <li>Link Item 1<a>some link path</a><li>
      <li>Link Item 2<a>some link path</a><li>
      <li>Link Item 3<a>some link path</a><li>
    </ul>
  </li>
  <li>Heading 2<a></a>
    <ul>
      <li>Link Item 4<a>some link path</a><li>
      <li>Link Item 5<a>some link path</a><li>
    </ul>
  </li>
</ul>

相关问题