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