如何用Javascript确定元素的语言?

时间:2015-02-11 19:48:09

标签: javascript html

根据the spec,语言是从最近的祖先元素继承的,该元素具有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属性不是继承的语言(或者它不是继承的;不知道)。 This fiddle展示了我所看到的行为。

如何使用Javascript确定元素的语言?我真的希望利用lang属性的继承,因为我还需要它与屏幕阅读器一起工作。

2 个答案:

答案 0 :(得分:3)

根据您链接到的规范:

  

要确定节点的语言,用户代理必须查看   最近的祖先元素(如果节点是,则包括元素本身)   元素)在XML命名空间集中具有lang属性或是   一个HTML元素,并且在没有命名空间属性集中有lang。那   attribute指定节点的语言(不管它是什么   值)。

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

答案 1 :(得分:1)

这是一个函数,它将返回&#34; lang&#34;的值。任何元素的最近祖先的属性,如果没有找到则为undefined:

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