【问题标题】:html - change language using element.langhtml - 使用 element.lang 更改语言
【发布时间】:2015-02-21 09:09:24
【问题描述】:

堆栈上的第一个问题,所以向我欢呼! 我正在尝试开发一种新方法(显然,因为我在网上没有看到解决此问题的方法,也许因为不可能)来使用 JS 和 lang 属性更改 HTML 编写元素的语言。

基本上,我已经创建了多个标签,每个标签都带有 lang 属性,因此给特定的 lang 一个显示值 -none-,隐藏它,并给它一个值 -inherit- 来显示它。 这样,使用以下行:

a:lang(en),p:lang(en) { display : none }
a:lang(it),p:lang(it) { display : inherit }

我一次只能看到一种语言。这行得通!

现在,我创建了一个

<a href="" lang="en" id="en"> word </a>

在英文文本周围标记,与任何其他具有自己的 lang 属性的语言相同。 我试过用:

$("#en").click(function(){
           $('a:lang(en)').css('display', 'inherit');
           $('a:lang(it)').css('display', 'none');
           };

这似乎不起作用。

有什么想法吗?

非常感谢, 谢伊

【问题讨论】:

  • 为什么不制作两个样式表,在更改语言时禁用当前一个并启用另一个。
  • 我只是想看看是否有更简单的方法来更改语言。无论如何,我不会为了隐藏和显示标签而更改样式表,我会创建一个不同的页面并进行加载,这应该更容易,不是吗?
  • 不同样式表的工作速度更快,并且支持在调用开关后动态添加元素。您的查询会找到页面上的每一个匹配项,想象一下那里有数千个元素,与交换样式表操作相比,它可能非常慢。
  • 我马上试试。如果它有效,我会告诉你并要求你写它作为答案,谢谢!
  • 已经给你答案了,一个更短的版本。见下文

标签: javascript html lang


【解决方案1】:

加载页面时带有&lt;body class="it"&gt;,所有:lang(en)标签都将被隐藏。

body.en :lang(it) {
  display: none;
}
body.it :lang(en) {
  display: none;
}

而当您需要更改语言时,只需更改&lt;body&gt;className

$("#en").click(function(){
  document.body.className = 'en';
};

哪个更优雅,速度更快。

演示:http://jsfiddle.net/Gw4eQ/


使用:not 选择器使其适用于更多语言。 demo

body:not(.en) :lang(en), 
body:not(.it) :lang(it), 
body:not(.fr) :lang(fr) { 
    display: none; 
}

【讨论】:

  • 太棒了,非常感谢!完美运行!甚至可以使用 4 种语言(必须在 css 中添加它们):jsfiddle.net/Gw4eQ/9
  • 我已经有一段时间没有回答这个问题了。请不要尝试使用多种语言,它可能会给你一长串规则。尝试使用 :not() 来缩短列表。
【解决方案2】:

您是否使用 ) 关闭了“点击”?

$("#en").click(function(){
       $('a:lang(en)').css('display', 'inherit');
       $('a:lang(it)').css('display', 'none');
 });

【讨论】:

    【解决方案3】:

    这是不正确的:

    $('a:lang(en)').attr('display', 'inherit');
    $('a:lang(it)').attr('display', 'none');
    

    没有“显示”属性,而是使用:

    $('a:lang(en)').css('display', 'inherit');
    $('a:lang(it)').css('display', 'none');
    

    或者简单地说:

    $('a:lang(en)').show();
    $('a:lang(it)').hide();
    

    ...但是你也有一个错误,你没有正确包装你的函数:

    $("#en").click(function(){
        $('a:lang(en)').css('display', 'inherit');
        $('a:lang(it)').css('display', 'none');
    }; // <---- error
    

    应该是:});

    $("#en").click(function(){
        $('a:lang(en)').css('display', 'inherit');
        $('a:lang(it)').css('display', 'none');
    }); // <---- fixed
    

    另外,我会使用inline 而不是inherit。 “继承”不是“默认”的意思,而是“从父级继承这个属性”,大概是block&lt;a&gt;的默认显示是inline

    【讨论】:

    猜你喜欢
    • 2023-01-27
    • 2021-05-25
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2017-08-08
    • 2020-12-04
    • 2021-12-10
    • 2017-11-04
    相关资源
    最近更新 更多