如何找出JavaScript中元素's lang属性的计算值

How to find out the computed value of an element's lang attribute in JavaScript?

本文关键字:lang 属性 计算 JavaScript 何找出 元素      更新时间:2023-09-26

我有时需要找出HTML lang属性(元素的语言)的计算值。我使用jQuery。例如,在下面的代码中,我想知道<p>元素的计算lang,并且我期望值he:

<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>
        <meta charset="utf-8" />
        <title>lang test</title>
    </head>
    <body>
        <div lang="ar">
            <div lang="he">
                <p>Hallo.</p>
            </div>
        </div>
    </body>
</html>

执行$( 'p' ).attr( 'lang' )没有返回任何结果,可能是因为<p>元素没有自己的lang属性。

这段代码似乎做了正确的事情:

 $( 'p' ).closest( '[lang]' ).attr( 'lang' )

这在功能上正确吗?是否有更好的方法使用jQuery、纯JavaScript或其他JavaScript库?

谢谢。

最简单的方法是写一个递归函数:

function getLanguage(node) {
  if(node.lang) {
    return node.lang;
  } else if(node.parentNode) {
    return getLanguage(node.parentNode);
  } else {
    return undefined;
  }
}

递归有时可能效率低下,但在这里可能无关紧要。

如果您非常频繁地需要文档中各种元素的信息,那么效率可能是相关的,然后您可以遍历整个文档树并添加一个新属性,为每个节点指示"计算语言"。

这个jQuery插件应该可以完成这项工作。它只考虑jQuery对象中的第一个元素。

(function($) {
    $.fn.lang = function() {
         if (this.length) {
             var node = this[0];
             while (node) {
                 if (node.lang) {
                     return node.lang;
                 }
                 node = node.parentNode;
             }
         }
    };
})(jQuery)

如果没有找到lang属性,则返回undefined