2012-07-21 77 views
2

为什么$('*[lang|="de"][lang|="sv"]').hide();不选择,然后用lang =“de”和lang =“se”属性隐藏所有h1s,h2s和ps?例如与选择具有多个属性的多个元素(语言切换器)

<p lang="de">Lorem Ipsum ist ein einfacher Blindtext für die Druckindustrie.</p> 
<p lang="en">Lorem Ipsum is simply dummy text of the printing industry.</p> 
<p lang="sv">Lorem Ipsum är en utfyllnadstext från tryckindustrin.</p> 

我是一个很简单的三重语言选择(默认为英文显示)像

<script type="text/javascript"> 
$('*[lang|="de"][lang|="sv"]').hide(); 

$("#lang_de").click(function (event) { 
event.preventDefault(); 
$('*[lang|="en"][lang|="sv"]').hide(); 
$('*[lang|="de"]').show(); 
}); 

$("#lang_sv").click(function (event) { 
event.preventDefault(); 
$('*[lang|="de"][lang|="en"]').hide(); 
$('*[lang|="sv"]').show(); 
}); 
</script> 

能属性选择不这样合并后?

编辑:这很适合我现在

(function() { 
$('*[lang|="de"], *[lang|="sv"]').hide(); 

$("#lang_de").click(function (event) { 
    event.preventDefault(); 
    $('*[lang|="en"], *[lang|="sv"]').hide(); 
    $('*[lang|="de"]').show(); 
}); 

$("#lang_sv").click(function (event) { 
    event.preventDefault(); 
    $('*[lang|="de"], *[lang|="en"]').hide(); 
    $('*[lang|="sv"]').show(); 
}); 
})(); 

回答

2

退房的jsfiddle

你需要有jQuery中multiple selectors时添加一个逗号。它应该看起来像

$('*[lang|="de"], *[lang|="sv"]').hide(); 

我也修复了您的点击事件。它也没有工作。它也需要通过*[lang|="de"]呼叫来选择。你可以在jsfiddle中看到一个工作示例。

这里是Multiple Selector

不完全是你的语言切换器的implematition的jQuery的文档。但是,如果您正在寻找在每种语言做了整个网站,而不是写出来你的网站多次,看看这个职位Multi Language网站

**更新**

看到这个jsfiddle因为不使用*作为选择器的一部分

+0

谢谢,逗号可以做到这一点。我确实看到过多个属性不是逗号分隔的例子;或者它可能是一个类和一个无效的属性?只是出于兴趣 - 而不是使用可怕的通用选择器(*),还可以在同一行中指定一个标签列表(比如h1 h2 p)? – Systembolaget 2012-07-21 17:48:19

+0

当多个属性不是逗号分隔时,这意味着它是元素中的元素。例子'$('#test .this')'会在例子'

but would not select this
'中得到这个类的元素'你可以看到它会选择'this'在'test'里面,但不是外面的那个。在几分钟内看到更新的jsfiddle,例如非通用选择器。 – bretterer 2012-07-21 17:51:58

+0

谢谢,我现在明白了:) – Systembolaget 2012-07-21 17:57:59