Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Parę zadań w jednej "funkcji"
Forum PHP.pl > Forum > Przedszkole
simperium
Aż wstyd pytać, jednakże po całkiem długim czasie wracam do js wstydnis.gif:/.

Mam taką zmienną:
Kod
var filterVal = $(this).text().toLowerCase().replace('tekst A','tekst B');

Prosta funkcja, która odnajduje tekst 1 i zmienia na drugi.
Chciałbym ją rozwinąć o więcej tekstów do podmiany,czyli by jednocześnie
Kod
var filterVal = $(this).text().toLowerCase().replace('tekst A','tekst B');
var filterVal = $(this).text().toLowerCase().replace('tekst C','tekst D');

Oczywiście w powyższym przykładzie zostanie zastosowana tylko ostatnia opcja, zatem tutaj robią się schody.
Spróbowałem wpakować to w funkcję:
Kod
function filterVal()
{
$(this).text().toLowerCase().replace(' tekst A','tekst B');
$(this).text().toLowerCase().replace(' tekst C','tekst D');
}


Ale po podmianie wszędzie fiterVal na filterVal() kod się nie wykonywał.
Ktoś poradzi, jak upchać parę zmian tekstów w jedną zmienną, etc?

Tutaj wrzucam całość kodu będącego częścią jquery Pretty photo (zaznaczyłem to wrażliwe miejsce):
Kod
$(document).ready(function() {



/* Pretty Photo */
$(\"a[rel^='gazeta']\").prettyPhoto({
                                          
            counter_separator_label: '/', /* The separator for the gallery counter 1 of 2 */
            theme: 'dark_rounded', /* light_rounded / dark_rounded / light_square / dark_square / facebook */
            horizontal_padding: 20, /* The padding on each side of the picture */
            hideflash: false, /* Hides all the flash object on a page, set to TRUE if flash appears over prettyPhoto */
            wmode: 'opaque', /* Set the flash wmode attribute */
            autoplay: true, /* Automatically start videos: True/False */
            modal: false, /* If set to true, only the close button will close the window */
            deeplinking: true, /* Allow prettyPhoto to update the url to enable deeplinking. */
            default_width: 1020,
            default_height: 704,                                
            social_tools: false,
            overlay_gallery: false,
            show_title: false,
            
                    
                                           });  /* Pretty Photo */
/* filtrowanie zawartości */

    $('ul#filter a').click(function() {
        $(this).css('outline','none');
        $('ul#filter .current').removeClass('current');
        $(this).parent().addClass('current');

        
/************************************************* TUTAJ JEST TEN ELEMENT **/
        var filterVal = $(this).text().toLowerCase().replace('TREŚĆ A','TREŚĆ B');        
/************************************************* TUTAJ JEST TEN ELEMENT **/    

    
        if(filterVal == 'all') {
            $('ul#portfolio li.hidden').fadeIn('slow').removeClass('hidden');
        } else {
            
            $('ul#portfolio li').each(function() {
                if(!$(this).hasClass(filterVal)) {
                    $(this).fadeOut('normal').addClass('hidden');
                } else {
                    $(this).fadeIn('slow').removeClass('hidden');
                }
            });
        }
        
        return false;
    });



});

Kod jest częścią skryptu jquery Pretty Photo
Greg0
Utworzyć z tych tekstów tablicę wielowymiarową lub obiekt. Przekazać ją do funkcji a tam wykonać pętlę i podmieniać po kolei według tablicy
simperium
Zrobiłem tak jak poniżej, ale nie działa :/. Oczywiście wszędzie, gdzie było filterVal, to zmieniłem na filterVal(). Nie wiem, czy dobrze robię?

Kod
var Tablica = [];
Tablica[0] = ['nazwa1' , 'nazwa2'];
Tablica[1] = ['nazwa3' , 'nazwa4'];
Tablica[2] = ['nazwa5' , 'nazwa6'];

function filterVal()
{
    licz=0;
    while (3>licz)
    {
    $(this).text().toLowerCase().replace('Tablica[licz][0]','Tablica[licz][1]');
    licz++;
    }
}


        
                
                
        if(filterVal() == 'all') {
            $('ul#portfolio li.hidden').fadeIn('slow').removeClass('hidden');
        } else {
            
            $('ul#portfolio li').each(function() {
                if(!$(this).hasClass(filterVal())) {
                    $(this).fadeOut('normal').addClass('hidden');
                } else {
                    $(this).fadeIn('slow').removeClass('hidden');
                }
            });
        }
        
        return false;
    });
stud3nt
Tak na szybko:

zamiast licz=0; daj
  1. var licz=0;

bo inaczej będzie rzucać błędem undefined. No, chyba że masz tą zmienną zadeklarowaną wcześniej (wątpię).

linia 11: nie pakuj nazwy tablicy w cudzysłowia, to nie ciąg znaków. Prawidłowa postać wygląda tak:
  1. $(this).text().toLowerCase().replace(Tablica[licz][0],Tablica[licz][1]);


Sama funkcja filterVal nic nie zwraca, więc warunek if jest bezcelowy. Nigdy nie będzie 'all', bo niby skąd. W ogóle cała Twoja pętla while() jest dziwna, bo robi w pustkę, efekty działania funkcji nie są nigdzie przypisywane i giną.
Zadeklaruj jakąś zmienną, do której będziesz dostawiał efekty kolejnych podmian i zwróć ją na końcu funkcji, ot choćby tak:

  1. function filterVal()
  2. {
  3. var licz=0;
  4. var text = $(this).text().toLowerCase();
  5.  
  6. while (3>licz)
  7. {
  8. text = text.replace(Tablica[licz][0], Tablica[licz][1]);
  9. licz++;
  10. }
  11.  
  12. return text;
  13. }


Pewnie dalej nie będzie działać, bo to tylko część skryptu, ale zawsze to jakiś krok do przodu.
Greg0
Odwołujesz się do $(this), które nie istnieje. Użyj pętli for.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.