如何使用JavaScript更改:lang选择器样式

乔普

我正在开发仅使用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>I更改其显示语言首选项时,我会有一个onChange=""执行JS函数事件标签。我没有JS的丰富经验,我想知道是否有一种方法可以用一种适合用户所需语言的样式覆盖该样式。

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

提前致谢。

插口

这是另一种方法,类似于您最初的CSS方法。首先,我们添加一个global / body-levellang属性,并将其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;
}

然后,在我们的选择处理程序中,我们可以修改body-levellang属性。就像:

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/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何更改日期范围选择器的样式?

使用CSS选择器更改SVG填充的颜色/样式

如何使用jQuery更改CSS选择器值的值?

如何使用下拉选择器更改搜索值?

如何在不更改样式的情况下禁用日期选择器

如何在具有其他组件选择器的角度组件中更改特定样式

如何更改 Angular 材质日期选择器的弹出日历样式

使用内联样式更改日期选择器的字体颜色

从javascript更改:before选择器

在悬停选择器更改之前获取元素样式

动态更改样式表规则选择器

选择器后更改 n 项的样式

更改CSS样式表的选择器属性

如何在jQuery选择器中使用JavaScript变量?

使用样式组件的下拉菜单:如何正确使用类选择器?

使用 JavaScript 编辑样式会禁用 CSS `:hover` 选择器

使用javascript选择器方法检查样式属性是否不存在

WordPress样式选择器?

使用:: ng-deep选择器时如何通过ID为元素应用样式

如何在SVG中使用和设置(选择器)嵌套符号样式

如何在样式组件中使用关节选择器

如何为伪样式选择器编写SASS类

样式选择器在Avalonia中如何工作?

如何设置材质 ui 时间选择器 dilog 样式

如何设置角度ng-template选择器的样式

如何为禁用的 antd 选择器设置样式

如何为日期选择器输入设置段落样式?

如何避免使用UIControlEvents上的选择器在UIButton选择上更改文本颜色?

使用aria标签作为样式选择器的最佳实践