假設你有一個HTML頁面,其中包含不同語言的部分,這樣的隱含lang屬性:獲取一個HTML元素
<html lang=en>
<div lang="th">
<p id="test1">ไทย</p>
</div>
<p id="test2">Implicitly English</p>
<div lang="en-CA">
<p id="test3">As Canadian as possible under the circumstances</p>
</div>
<p lang="en-AU"id="test4">Explictly Aussie</p>
</html>
有沒有發現哪個特定的語言代碼,適用於指定的一個直接的方式HTML元素?喜歡的東西:
// pseudo-code
var lang = myElement.getLang()
這裏似乎是一個很迂迴的解決方案:
function getLang(element) {
var lang = element.getAttribute("lang")
if (!lang) {
var elements
, languages
, language
, ii
, selector
// Find all elements with an explicit lang attribute
elements = [].slice.call(document.querySelectorAll("*[lang]"))
// Determine which languages are present
languages = []
for (ii in elements) {
lang = elements[ii].getAttribute("lang")
if (languages.indexOf(lang) < 0) {
languages.push(lang)
}
}
lang = "" // reset
for (ii in languages) {
language = languages[ii]
selector = ":lang(" + language + ")"
elements = [].slice.call(document.querySelectorAll(selector))
if (elements.indexOf(element) > -1) {
if (lang.length < language.length) {
lang = language
}
}
}
}
return lang
}
有沒有更明顯的方式? jsFiddle
'element.lang'將讓你的'lang'屬性值,似乎是相當直接的。或者你的意思是,如果孩子的元素沒有父母,你是否需要父母? –
您可以使用選擇器(如您所見)來獲取具有lang屬性的元素。對於任何特定節點,您可以使用[* contains *](https://developer.mozilla.org/en/docs/Web/API/Node/contains)方法來查看它是否是任何特定節點的後代。你的代碼看起來很複雜,可以大大簡化。請注意,在IE 8中'[] .slice.call(hostObject)'將失敗。 – RobG
在最新的Chrome和Firefox中,整個函數只是'element.closest('[lang]')。lang' – adeneo