根据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
属性的继承,因为我还需要它与屏幕阅读器一起工作。
答案 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