Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Skrócenie kodu .js, wątek pomocy w skracaniu istniejącego kodu
Orgin
post 6.08.2013, 19:56:59
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 6.08.2013

Ostrzeżenie: (0%)
-----


Witam - mam taki kod jak poniżej, ale chciałbym umieścić 500 elementów. Ręczne wbijanie tylu elementów jest drakońskie. Jak to skrócić?
registration = function (local_conf)
{
if (typeof jQuery === 'undefined') {
throw 'registration exception: jQuery not found.';
}

var conf = {};

conf.boxId = null;
conf.env = null;

/**
* @param {Object} data
*/
var init = function (local_conf)
{
conf = jQuery.extend(conf, local_conf);

//
init = function () { };


jQuery( 'div.chamber_menu a' ).click( function()
{
var menuType = this.name;

jQuery( 'div.chamber_menu a' ).attr( 'class', '' );
jQuery( this ).attr( 'class', 'active' );

switch(menuType) {
case '0-1':
jQuery('div.form-2').hide();
jQuery('div.form-3').hide();
jQuery('div.form-4').hide();
jQuery('div.form-5').hide();
jQuery('div.form-1').show();
jQuery('div.form-6').hide();
jQuery('div.form-7').hide();
jQuery('div.form-8').hide();
break;
case '0-2':
jQuery('div.form-2').show();
jQuery('div.form-1').hide();
jQuery('div.form-3').hide();
jQuery('div.form-4').hide();
jQuery('div.form-5').hide();
jQuery('div.form-6').hide();
jQuery('div.form-7').hide();
jQuery('div.form-8').hide();
break;
case '0-3':
jQuery('div.form-1').hide();
jQuery('div.form-2').hide();
jQuery('div.form-4').hide();
jQuery('div.form-3').show();
jQuery('div.form-5').hide();
jQuery('div.form-6').hide();
jQuery('div.form-7').hide();
jQuery('div.form-8').hide();
break;
case '0-4':
jQuery('div.form-1').hide();
jQuery('div.form-2').hide();
jQuery('div.form-3').hide();
jQuery('div.form-5').hide();
jQuery('div.form-6').hide();
jQuery('div.form-4').show();
jQuery('div.form-7').hide();
jQuery('div.form-8').hide();
break;
case '0-5':
jQuery('div.form-1').hide();
jQuery('div.form-2').hide();
jQuery('div.form-3').hide();
jQuery('div.form-4').hide();
jQuery('div.form-6').hide();
jQuery('div.form-7').hide();
jQuery('div.form-5').show();
jQuery('div.form-8').hide();
break;
case '0-6':
jQuery('div.form-1').hide();
jQuery('div.form-2').hide();
jQuery('div.form-3').hide();
jQuery('div.form-4').hide();
jQuery('div.form-6').show();
jQuery('div.form-5').hide();
jQuery('div.form-7').hide();
jQuery('div.form-8').hide();
break;
case '0-7':
jQuery('div.form-1').hide();
jQuery('div.form-2').hide();
jQuery('div.form-3').hide();
jQuery('div.form-4').hide();
jQuery('div.form-7').show();
jQuery('div.form-5').hide();
jQuery('div.form-6').hide();
jQuery('div.form-8').hide();
break;
case '0-8':
default:
jQuery('div.form-1').hide();
jQuery('div.form-2').hide();
jQuery('div.form-3').hide();
jQuery('div.form-4').hide();
jQuery('div.form-5').hide();
jQuery('div.form-8').show();
jQuery('div.form-6').hide();
jQuery('div.form-7').hide();
break;
}

return false;
});
};

jQuery(document).ready(
function ()
{
init(local_conf);
}
);
}
Go to the top of the page
+Quote Post
zegarek84
post 6.08.2013, 20:26:26
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


pytanie bo są same przypadki 0-x, a co z przypadkami x-x, czyli np. 1-0, 2-3...

na to co widać to "normalnie"
po prostu zapisz sobie te elementy do tablicy (plus jeszcze mając referencję do tych elementów nie będziesz musiał ich od nowa wyszukiwać) i po najmniejszej linii oporu ukryj wszystkie w pierwszej kolejności a pokaż ten który masz pokazać z tej tablicy, ale mówiąc po najmniejszej linii oporu miałem na myśli byś łatwiej miał zrozumieć... skoro już wszystkie elementy są ukryte a tylko jeden jest widoczny, to możesz po inicjalizacji gdzie wsjo ukryłeś przechowujesz referencję do widocznego, potem ukrywasz ten widoczny a pokazujesz ten nowy element...

ps. dodaj tag "JavaScript" - pewnie mi rozbije ten wyraz ;p

Ten post edytował zegarek84 6.08.2013, 20:27:14


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
Orgin
post 6.08.2013, 20:39:50
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 6.08.2013

Ostrzeżenie: (0%)
-----


jestem bardzo słaby jeśli chodzi o .js, więc to co piszesz nic mi nie mówi...

pytanie bo są same przypadki 0-x, a co z przypadkami x-x, czyli np. 1-0, 2-3...

inaczej - można zamienić 0-1 na 1, 0-2 na 2 itd.

dostałem gotowy kod, ale chciałbym rozbudować go, bo mam więcej elementów do ukrycia. Jeśli byłbyś w stanie mi to napisać to bym był zobowiązany, jeśli nie masz ochoty ok peace smile.gif

Ten post edytował Orgin 6.08.2013, 20:41:53
Go to the top of the page
+Quote Post
SmokAnalog
post 7.08.2013, 09:01:25
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Kod jest bardzo brzydki, amatorski. Powinien być przepisany na nowo tak naprawdę.

No ale jeśli chcesz go użyć, to jak słusznie zauważyłeś, pokazywany jest element 0-X. Czyli całą instrukcję switch możesz zamienić na:

[JAVASCRIPT] pobierz, plaintext
  1. var menuTypeChunks = menuType.split('-');
  2. if(menuTypeChunks.length >= 2) {
  3. jQuery('.menu > div').hide();
  4. jQuery('div.form-' + menuTypeChunks.pop()).show();
  5. }
[JAVASCRIPT] pobierz, plaintext


W linii 3. użyłem selektora .menu > div - zamień to na selektor, który zadziała u Ciebie w kodzie. Zamiast wybierać wszystkie divy do schowania, odnieś się do nich np. jako "wszystkie divy będące dziećmi XXX".
Go to the top of the page
+Quote Post
Crozin
post 7.08.2013, 09:27:41
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


@zegarek84: Mamy linię najmniejszego oporu, nie najmniejszą linię oporu. wink.gif
@Orgin: Masz kilka podstawowych błędów. Przede wszystkim CSS-owskie klasy traktujesz jako identyfikatory. Powinieneś wszystkim tym formularzom nadać jedną wspólną klasę oraz każdemu z osobna unikalny identyfikator:
  1. <form ... class="my-form" id="my-form-1">...</form>
  2. <form ... class="my-form" id="my-form-2">...</form>
  3. ...
  4. <form ... class="my-form" id="my-form-n">...</form>
Dzięki temu będziesz mógł wygodnie operować tak na wszystkich formularzach jak i na każdym z osobna.
[JAVASCRIPT] pobierz, plaintext
  1. (function($) {
  2. "use strict";
  3.  
  4. var $menuLinks = $("div.chamber_menu a");
  5. var $forms = $(".my-form");
  6.  
  7. $menuLinks.on("click", function(e) {
  8. e.preventDefault();
  9.  
  10. // Nie kasuj wszystkich klas, a jedynie tą, która Cię interesuje
  11. $menuLinks.removeClass("active");
  12. $(this).addClass("active");
  13.  
  14. $forms.hide();
  15. $("#my-form-" + this.name).show();
  16. });
  17. })(window.jQuery);
[JAVASCRIPT] pobierz, plaintext
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 15:44