5

我有时需要找出 HTMLlang属性(元素的语言)的计算值。我正在使用 jQuery。例如,在下面的代码中,我想知道<p>元素的计算语言,我希望得到值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>

Doing$( 'p' ).attr( 'lang' )什么都不返回,可能是因为该<p>元素没有自己的 lang 属性。

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

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

这在功能上正确吗?有没有更好的方法在 jQuery、纯 JavaScript 或其他 JavaScript 库中做到这一点?

谢谢你。

4

2 回答 2

1

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

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

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

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

于 2013-05-11T17:38:18.573 回答
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找到属性,它将返回。

于 2013-05-11T15:31:44.797 回答