如何在JavaScript中找出元素的lang属性的计算值?

时间:2013-05-11 15:01:45

标签: javascript jquery html

我有时需要找出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库中做到这一点?

谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

递归有时可能效率低下,但这里可能并不重要。

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

答案 1 :(得分:0)

这个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)

如果找不到undefined属性,它将返回lang