Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我有很多;如果/否则“;声明,我应该用不同的方式写吗?_Php_Javascript_Html - Fatal编程技术网

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';
}