Ben "IF / ELSE" bir sürü var

6 Cevap php

Bu benim ne var:

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

Bunu nasıl yazarsınız? Bu, yukarıda yani "çirkin" gibi görünüyor!

Teşekkürler

6 Cevap

I am assuming this is JavaScript generated by PHP. To keep a maintainable PHP file, I would do the following:

<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";
 }
?>

Bu çıkışı hakkında çok umurumda değil, ama durum yankılanan zaman kolayca bir kaç \n s boşluklar ve Prettified olabilir.

var category_ids= {
    'Ljud & Bild': 'nav_sub_ljud_bild',
    'Datorer': 'nav_sub_datorer',
    // ...and many more...
};

for (var c in category_ids)
    byId(category_ids[c]).style.display= category===c? 'block' : 'none';

Eğer statik category_ids arama olmak zorunda olmasaydı hala daha basit olurdu. Kategori id otomatik metin, örneğin oluşturulur. lowercasing ile noktalama açıklıklı değiştirerek _? Eğer öyleyse kendinizi orada yazarak bir grup kurtarabilir.

Biz <select> bir kategori toplama bahsediyoruz eğer Veya, geleneksel doğrudan eşlenmiş olabilir ki, value seçeneği bir id olurdu eşleme için nav.

Ben bir sözlük (ilişkisel dizi) kullanın ve üzerinde yineleme için basit bir döngü olurdu.

Bu bir ilişkisel dizi olarak görülebilir bir nesne kullanılarak yapılabilir:

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

Seni almak için gidiyoruz üçlü tabloların kullanımınız muhtemelen küçük kod bloğu (ve bana temiz) yapacak söyleyebilirim. Ben burada amaçları hakkında bir şey bilmeden yapabilirdiniz sadece öneri bir diziye ilgili öğeleri koymak ve daha sonra dizi üzerinden foreach ve döngü diziden değişkenler kullanarak tek bir üçlü bildirimde olacaktır. Bu aynı net etkisi ile kod 'göz' temiz yapacaktır.

Artı bu yüzden bir kez yerine 100 kere make değişiklikleri hızlandırır.

İşte go-yollarından biridir

You could collect all of the elements with display switches in a group- for example, give them all the same class name, or make them the only tags of some type of some parent 'categories'.

var G= byId('categories').getElementsByTagName('li');

Ve istediğiniz elemanı çözmek için hızlı bir yol bulmak gösterildi-

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