html-изменение языка с помощью элемента.ленг

первый вопрос на стек, так что ура мне! Я пытаюсь разработать новый способ (по-видимому, поскольку я не видел решения для этого в интернете, возможно, потому, что это невозможно) изменить язык HTML-элементов с помощью JS и свойства lang.

В основном, я создал несколько тегов со свойством 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');
           };

который не работает.

какие идеи?

спасибо, Шай

3 ответов


при загрузке страницы приходят с <body class="it">, и все :lang(en) теги будут скрыты.

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

и если вам нужно изменить язык, просто измените className of <body>.

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

что более элегантно и намного быстрее.

демо:http://jsfiddle.net/Gw4eQ/


использовать :not селектор, чтобы заставить его работать с большим количеством языков. демо

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

вы закрыли "click" с ) ?

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

это неверно:

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

нет атрибута "display", вместо этого используйте:

$('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. <a>по умолчанию дисплей inline.