javascript - 如何更改 :lang selector style with JavaScript

标签 javascript html css

我正在开发一个非常简单的多语言静态网站,仅使用 HTML5、CSS3 和普通(原始)JavaScript。

假设 HTML 看起来像这样:

<html>
  <head>
    <title>WEBSITE</title>
  </head>
  <body>
    <header>
      <h1 lang="en">ENGLISH HEADER</h1>
      <h1 lang="fr">FRENCH HEADER</h1>
      ...
    </header>
    <main>
      <article lang="en"><p>...</p></article>
      <article lang="fr"><p>...</p></article>
      ...
    </main>
  </body>
</html>

我希望英语成为默认语言,所以在我的 CSS 上我这样做:

header h1:not(:lang(en)), main article:not(:lang(en)) {
  display: none;
}

当用户通过 <select> 更改他们的显示语言偏好时我有一个 onChange=""执行 JS 函数的事件标签。我对 JS 没有太多经验,我想知道是否有办法用用户所需语言的类似样式覆盖该样式。

请记住,为了使本网站尽可能简单,我有意避免使用任何 JS 框架和 jQuery。

提前致谢。

最佳答案

这是另一种方法,类似于您最初的 CSS 方法。首先,我们添加一个全局/主体级 lang 属性,并将 en 作为我们的值(因为我们希望它是默认值)。

然后我们可以将我们的 CSS 应用为:

body[lang="en"] [lang="fr"], // if <body lang=en>, hide all lang=fr
body[lang="fr"] [lang="en"]{ // if <body lang=fr>, hide all lang=en
    display: none;
}

相反的(或者,:not,如您所问)看起来像:

body[lang=en] [lang]:not([lang=en]),
body[lang=fr] [lang]:not([lang=fr]) {
    display: none;
}

然后在我们的选择处理程序中,我们可以只修改正文级别的 lang 属性。很简单:

function langChange(el) {
  document.body.setAttribute('lang', el.value);
}

这是您可以用来测试的片段:

function langChange(el) {
  document.body.setAttribute('lang', el.value);
}
body[lang="en"] [lang="fr"],
body[lang="fr"] [lang="en"]{
  display: none;
}
<body lang="en">
  <header>
    <h1 lang="en">ENGLISH HEADER</h1>
    <h1 lang="fr">FRENCH HEADER</h1>
    ...
  </header>
  <main>
    <article lang="en">
      <p>English Paragraph</p>
    </article>
    <article lang="fr">
      <p>French Paragraph</p>
    </article>
    ...
  </main>
  <select onChange="langChange(this)">
    <option selected value="en">English</option>
    <option value="fr">French</option>
  </select>
</body>

(这是 :not 用例的示例,以及使用 CSS 预处理器输出选择器:https://jsfiddle.net/o7vxskzL/)

关于javascript - 如何更改 :lang selector style with JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55444803/

相关文章:

javascript - 在 HTML 4.0 Transitional jQuery 中,$(document).height() 在 FireFox 和 Chrome 中返回不正确的值,但在 IE 中不会

html - 输入文件预设有文件路径

jquery - 将不同的图像更改/裁剪为动态调整大小(根据浏览器的)div

javascript - 单击按钮时激活按钮的悬停状态,直到单击另一个按钮 (Javascript/JQuery)

javascript - 动态创建元素并添加 onclick 事件不起作用

JavaScript:如何从 JSON 数据获取特定值

javascript - 图像已弃用的 lowsrc 的最佳替代方案是什么?

html - 使用 CSS 和 HTML 将父 Div 扩展到元素的宽度

javascript - 移动栏的位置标签,最大化/最小化屏幕,文本不稳定(在 C3.js - D3.js 中)

javascript - 从对象数组中提取数据并按字母顺序排序(同时)