如何确定元素's语言与Javascript

How to determine an element's language with Javascript?

本文关键字:语言 Javascript 何确定 元素      更新时间:2023-09-26

根据规范,语言是从最近的祖先元素继承的,该元素设置了lang。那么,我该如何获得这些后裔的语言呢?

我正在设置具有lang属性的语言:

<div id="outer" lang="es">
    <div id="inner">¿Por qué?</div>
</div>

并尝试使用lang属性访问它:

alert(document.getElementById('outer').lang);
alert(document.getElementById('inner').lang);

我很快注意到内部div的lang属性不是继承的语言(或者它不是继承的;不知道)。这把小提琴展示了我所看到的行为。

如何使用Javascript确定元素的语言?我真的很想利用lang属性的继承,因为我也需要它来处理屏幕阅读器。

从您链接到的规范:

要确定节点的语言,用户代理必须查看最近祖先元素(如果节点元素),该元素在XML名称空间集合中具有lang属性或者是HTML元素并且在没有名称空间属性集合中具有CCD_ 7。那个属性指定节点的语言(无论其值)。

从另一个元素继承并不意味着为元素本身设置了属性。因此,您的代码也必须找到最近的具有lang属性的父级(如果存在)。如果这听起来有问题,请看这个问题。

这里有一个函数,它将返回任何元素的最近祖先的"lang"属性的值,如果没有找到,则返回未定义的值:

function elementLang(el) {
  while (el) {
    if (el.hasAttribute('lang')) {
      return el.getAttribute('lang');
    }
    el = el.parentElement;
  }
}
// From your example jsFiddle...
elementLang(document.getElementById('inner')); // => "es"
elementLang(document.getElementById('outer')); // => "es"
elementLang(document.getElementById('output')); // => undefined