Php 我有很多;如果/否则“;声明,我应该用不同的方式写吗?
这就是我所拥有的:Php 我有很多;如果/否则“;声明,我应该用不同的方式写吗?,php,javascript,html,Php,Javascript,Html,这就是我所拥有的: (category=="Ljud & Bild")?byId("nav_sub_ljud_bild").style.display='block' : byId("nav_sub_ljud_bild").style.display='none'; (category=="Datorer")?byId("nav_sub_datorer").style.display='block' : byId("nav_sub_datorer").style.display='n
(category=="Ljud & Bild")?byId("nav_sub_ljud_bild").style.display='block' : byId("nav_sub_ljud_bild").style.display='none';
(category=="Datorer")?byId("nav_sub_datorer").style.display='block' : byId("nav_sub_datorer").style.display='none';
(category=="Telefoner & Fax")?byId("nav_sub_telefoner").style.display='block' : byId("nav_sub_telefoner").style.display='none';
(category=="Överlåtelser")?byId("nav_sub_overlatelser").style.display='block' : byId("nav_sub_overlatelser").style.display='none';
(category=="Fastigheter & Lokaler")?byId("nav_sub_fastigheter").style.display='block' : byId("nav_sub_fastigheter").style.display='none';
(category=="Inventarier/Inredning")?byId("nav_sub_inventarier").style.display='block' : byId("nav_sub_inventarier").style.display='none';
(category=="Tjänster")?byId("nav_sub_tjanster").style.display='block' : byId("nav_sub_tjanster").style.display='none';
(category=="Resor & Biljetter")?byId("nav_sub_resor").style.display='block' : byId("nav_sub_resor").style.display='none';
(category=="Sport & Träning")?byId("nav_sub_sport").style.display='block' : byId("nav_sub_sport").style.display='none';
(category=="Böcker & Litteratur")?byId("nav_sub_litteratur").style.display='block' : byId("nav_sub_litteratur").style.display='none';
(category=="Djur")?byId("nav_sub_djur").style.display='block' : byId("nav_sub_djur").style.display='none';
(category=="Musik-Instrument")?byId("nav_sub_musik_instrument").style.display='block' : byId("nav_sub_musik_instrument").style.display='none';
(category=="Hobby & Samlarobjekt")?byId("nav_sub_samlarobjekt").style.display='block' : byId("nav_sub_samlarobjekt").style.display='none';
(category=="Smycken & Klockor")?byId("nav_sub_juveler").style.display='block' : byId("nav_sub_juveler").style.display='none';
(category=="Leksaker & Barn-artiklar")?byId("nav_sub_leksaker_barn").style.display='block' : byId("nav_sub_leksaker_barn").style.display='none';
(category=="Vuxen-plagg")?byId("nav_sub_vuxen_plagg").style.display='block' : byId("nav_sub_vuxen_plagg").style.display='none';
你会怎么写?这上面看起来很“丑陋”
谢谢我假设这是PHP生成的JavaScript。 要保留可维护的PHP文件,我将执行以下操作:
<script type="text/javascript">
function element_hide(id) { document.getElementById(id).style.display = "none"}
function element_show(id) { document.getElementById(id).style.display = "block"}
</script>
<?php
$categories = array(
// Insert all categories here. If a new property comes along
// (e.g. "active/inactive") we can easily add it.
array("label" => "Smycken & Klockor", "id" => "nav_sub_juveler"),
array("label" => "Vuxen-plagg", "id" => "nav_sub_vuxen_plagg")
...
);
foreach ($categories as $category)
{
echo "if (category == '".$category["label"]."') ".
"element_show('".$category["id"]."');".
" else element_hide('".$category["id"]."');\n";
}
?>
函数元素_hide(id){document.getElementById(id).style.display=“none”}
函数元素_show(id){document.getElementById(id.style.display=“block”}
我想说,使用三元语句可能会使您得到的代码块最小(对我来说也是最干净的)。在不了解您的用途的情况下,我可以提出的唯一建议是将相关项放入一个数组中,然后foreach遍历该数组,并使用循环数组中的变量生成一个三元语句。这将使您的代码“看起来”更干净,具有相同的净效果
另外,它将加快您所做的更改,使您只做一次而不是100次。我将使用字典(关联数组)并有一个简单的循环进行迭代。可以使用一个可以被视为关联数组的对象来完成:
var categories = {
'Ljud & Bild': 'nav_sub_ljud_bild',
'Datorer': 'nav_sub_datorer'
};
var active = 'Datorer';
for(name in categories){
var display = (name == active) ? 'block' : 'none';
document.getElementById(categories[name]).style.display = display;
}
如果您不必使用静态category\u id
lookup,那么就更简单了。是否从文本自动生成类别id,例如,通过将标点符号的范围小写并替换为
?如果是这样的话,你可以省下一大堆打字的时间
或者,如果我们谈论的是从
中选择一个类别,那么传统上,您在选项的值中会有一个id
,它可以直接映射到匹配的导航
,下面是许多方法之一-
您可以使用组中的显示开关收集所有元素-
例如,给它们所有相同的类名,或者使它们成为唯一的标记
属于某些父“类别”的某些类型
var G= byId('categories').getElementsByTagName('li');
并找到一种更快的方法来解析要显示的元素-
var cat= category.toLowerCase().split(/[/*&\-]+/);
catname= (function(){
switch(cat[0]){
case 'Böcker': case 'Hobby': return cat[1];
case 'Smycken ': return 'juveler';
case 'Leksaker': return 'leksaker_barn';
case 'Ljud': case 'Musik': return cat.join('_');
default: return cat[0];
}
})();
catnamed= byId('nav_sub_'+catname);
var G= byId('categories').getElementsByTagName('li')
for(var i=0, L=G.length;i<L;i++){
who=G[i];
// if(who.className=='catToggle'{
if(who== catnamed) who.style.display= 'block';
else if(who.style.display!= 'none') who.style.display= 'none';
}
var cat=category.toLowerCase().split(/[/*&\-]+/);
catname=(函数(){
开关(类别[0]){
案例“Böcker”:案例“Hobby”:回归猫[1];
案例'Smycken':返回'juvenler';
案例“Leksaker”:返回“Leksaker_barn”;
案例“Ljud”:案例“Musik”:返回cat.join(“”);
默认值:返回类别[0];
}
})();
catnamed=byId('nav_sub_'+catname);
var G=byId('categories')。getElementsByTagName('li'))
对于(var i=0,L=G.length;i如果可以用Javascript编写Javascript,那么为什么要用PHP编写Javascript?@Harmen我假设他是从某处(例如PHP数据库)获取数据的。他没有说,所以我猜这一点是因为他添加了php
标记。如果只是JavaScript,你的解决方案无疑是最优雅的。从技术上讲,它是一个对象,而不是关联数组。@Gordon:你是对的。现在我想知道是否可以像定义对象那样在一行上定义关联数组……不是那样我知道,但只要解决方案有效,我就不担心了。+1 snap:-)JS中没有关联数组类型,尽管对象在必要时可以使用字符串键,并且不需要存储与Object
方法(如toString
)冲突的名称。您可以用两个数组构建一个真实的、任意类型的关联数组,但性能不好。出于好奇,对象成员可能包含空格和符号吗?是的,它们可以包含任何字符,但显然只有有效的JavaScript标识符可以使用对象点名称语法访问。唯一有问题的成员名称是空字符串和与对象冲突的成员名称。prototype
成员名称,在IE中,由于JScript有缺陷,没有枚举这些名称。谢谢,我也通过JSLint运行了它,它也没有给出任何警告。
var cat= category.toLowerCase().split(/[/*&\-]+/);
catname= (function(){
switch(cat[0]){
case 'Böcker': case 'Hobby': return cat[1];
case 'Smycken ': return 'juveler';
case 'Leksaker': return 'leksaker_barn';
case 'Ljud': case 'Musik': return cat.join('_');
default: return cat[0];
}
})();
catnamed= byId('nav_sub_'+catname);
var G= byId('categories').getElementsByTagName('li')
for(var i=0, L=G.length;i<L;i++){
who=G[i];
// if(who.className=='catToggle'{
if(who== catnamed) who.style.display= 'block';
else if(who.style.display!= 'none') who.style.display= 'none';
}