如何确定一个元素';使用Javascript的语言是什么?

如何确定一个元素';使用Javascript的语言是什么?,javascript,html,Javascript,Html,根据,语言是从最近的祖先元素继承的,该元素具有langset。那么,我如何获得这些后裔中的一个的语言呢 我正在使用lang属性设置语言: <div id="outer" lang="es"> <div id="inner">¿Por qué?</div> </div> 我很快注意到内部div的lang属性不是继承的语言(或者它不是继承的;不知道)。显示我看到的行为 如何使用Javascript确定元素的语言?我真的希望利用lang属性的继

根据,语言是从最近的祖先元素继承的,该元素具有
lang
set。那么,我如何获得这些后裔中的一个的语言呢

我正在使用
lang
属性设置语言:

<div id="outer" lang="es">
    <div id="inner">¿Por qué?</div>
</div>
我很快注意到内部div的
lang
属性不是继承的语言(或者它不是继承的;不知道)。显示我看到的行为


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

来自您链接到的规范:

要确定节点的语言,用户代理必须查看 最近的祖先元素(如果节点是 元素),该元素在XML命名空间集中具有
lang
属性,或者 一个HTML元素,在未设置名称空间属性的情况下具有
lang
。那个 属性指定节点的语言(无论其名称如何) 价值)


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

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

功能元素语言(el){
while(el){
if(el.hasAttribute('lang')){
返回el.getAttribute('lang');
}
el=el.parentElement;
}
}
//从您的示例JSFIDLE。。。
elementLang(document.getElementById('inner'));//=>“es”
elementLang(document.getElementById('outer'));//=>“es”
elementLang(document.getElementById('output'));//=>未定义

您必须遍历DOM树才能找到它。假设设置了
lang
属性。仅仅因为DOM元素从祖先继承行为,并不意味着它本身就有属性集。如果将其设置为迭代而不是递归,这将是一个更好的解决方案。递归通常很慢,这里不需要使用它。所以迭代比递归好?简单的迭代通常肯定更快,你不能总是用它来以合理的方式实现你想要的。那么尾部调用优化解释器或编译器上的尾部递归呢?请参阅我评论的后半部分。OP需要用来确定元素是否具有lang属性。我猜
如果(typeof element.getAttribute('lang')='string')
也可以做这项工作。我真的希望实际的用户代理(浏览器)能够为我做这项工作。
alert(document.getElementById('outer').lang);
alert(document.getElementById('inner').lang);