jQuery - ściąga

Published 2010-09-07 by ajdacz in JavaScript | jQuery

1. Wybrany napis w combo:

$('select[id$=ddObszary]').find('option:selected').text()

2. Wybrana wartość w combo:

 

$('select[id$=ddHale]').val()

 

3. Podświetlane wiersze w gridzie:

 

var p = $("table[id=ZamowieniaTable] tbody tr");
    if (p != null) {
        p.not(":first")
            .hover(
            function() { $(this).addClass("ui-state-hover") },
            function() { $(this).removeClass("ui-state-hover") });
    }

 

4. Funkcja do obsługi plus/minus przy grupowaniu wierszy w gridach:

 

function toggleGroup(img, numberOfRows) {
    var tr = img.parentNode.parentNode;
    var table = $('table#tableWyposazenieDodatkowe')[0];
    var src = img.src;

    var startIndex = tr.rowIndex + 2;
    var stopIndex = startIndex + parseInt(numberOfRows);

    if (src.endsWith('plus.png')) {
        for (var i = startIndex; i < stopIndex; i++) {
            $(table.rows[i]).show();
        }
        src = src.replace('plus.png', 'minus.png');
    }
    else {
        for (var i = startIndex; i < stopIndex; i++) {
            $(table.rows[i]).hide();
        }
        src = src.replace('minus.png', 'plus.png');
    }
    img.src = src;
}

 


Problem: mamy po stronie klienta, fragment strony w HTML'u, który chcemy wysłać na serwer w postaci niezmienionej.

W celu zakodowania znaczników HTML, postanowiłem w pętli przejść po wszystkich znaczkach i zakodować je uzyskując w ten sposób zmienną typu string jak pokazuje to poniższa funkcja:

function encode_string(html) {
    var zwrot = '';

    for (var i = 0; i < html.length; i++) {
        zwrot = zwrot + html.charCodeAt(i) + '&';
    }
    zwrot = zwrot.substring(0, zwrot.length - 1);

    return zwrot;
}

Sposób powyższy działa prawidłowo we wszystkich przeglądarkach, z jednym tylko mankamentem: w przeglądarce IE7 (w tej i dokładnie tylko w tej) czas wykonania pętli w funkcji, dla ciągu wejściowego w rozmiarze ok. 4000 znaków, wynosi ok. 6 sekund! W moim przypadku była to sytuacja nie do przyjęcia.

Rozwiązaniem tego problemu było zastosowanie zmiennej tablicowej. Rezygnujemy z konkatenacji stringów na rzecz tablicy, którą w pętli wypełniamy kolejnymi kodami. Po zakończeniu, tworzymy jednego stringa, na podstawie tablicy, używając w tym celu funkcji "join" przyjmującej jako parametr znak sklejający poszczególne elementy tablicy. Zoptymalizowana funkcja kodująca znajduje się poniżej, a czas jej wykonania skrócił się do ułamka sekundy:

function encode_string(html) {

    var zwrot = '';

    var max = html.length;
    var array = new Array(max);

    for (var i = 0; i < max; i++) {
        array[i] = html.substr(i, 1).charCodeAt(0);
    }
    zwrot = array.join('&');

    return zwrot;
}