Mirosław Sadowski

Mirosław Sadowski właściciel, zpo grim

Temat: Jquery na stronie zmodyfikowanej przez javascript

Witam!
Zrobiłem stronicowanie wyników wyszukiwarki w ten sposób , że:
- wszystkie wyniki za jednym razem ściągam z bazy i przez PHP umieszczam w skrypcie - każdy wynik jako instrukcja js.
- za pierwszym otwarciem strony wyniki (20) są wyświetlone przez kod HTML strony.
- następne wyświetlam po 20 za pomocą js


for(var i=(nr_str-1)*20;i<(nr_str-1)*20+reszta;i++){
var wstep = '<div class="atom"><div class="div_etykiety"><span class="nazwa_etykiety">'+changeBass(typ[i])+'</span></div><div class="opis_linku">';
var tytulek = '<a href="'+linek[i]+'"><span class="tytul_linku">'+tytul[i]+'</span></a><br />';
var courier = '<span class="fragment_tresci courier">';
var courier = '<span class="fragment_tresci">';
var stopka = '</span><span class="stopka_linku"><ul class="lista_stopki"><li class="element_listy_stopki">Odsłon 30</li><li class="element_listy_stopki">User Mirek</li><li class="element_listy_stopki">Dodaj do </li></ul></span>';
var srodek = '<span class="link"><a href="'+linek[i]+'">'+linek[i]+'</a></span><span class="fragment"></span>';
var koniec = '</div><div class="obrazek_plyty"><img width="0" height="0" src="plyty/1-1.jpg" /></div></div>';
atom=wstep+tytulek+courier+srodek+stopka+ koniec;
panel = panel + atom;
}


$('#wyniki_panel_lewy').replaceWith(panel);


gdzie zmienna panel zawiera nowy kod HTML w divie o klasie .atom

stronicowanie działa super ale...

I teraz problem.

Każdy z wyników jest rozwijany przez jquery,

$(function(){
var tabulatura;

$('.opis_linku').hover(function(e){
ts=$(this);
hrefik=ts.children('a').attr('href');
if(hrefik.substr(0,4)=='tabs'){
pattern = /\/([0-9]+)$/;
matched = pattern.exec(hrefik);
idek = matched[0].substr(1);
load('http://guitar.ly/ajax_pobierz_fragmenty.php?Idek='+idek, function(xhr) {

var response = JSON.parse(xhr.responseText);
tabulatura=response.Tabulatura;
ts.children('span').children('.fragment').html(tabulatura);
});
}; }, function(){
ts.children('span').children('.fragment').html('');
}); //koniec hover
});

(funkcji load nie zamieszczam.)
ale działa tylko na pierwszej stronie stworzonej "klasycznie", nie działa na stronie jakby wirtualnej zmodyfikowanej przez js. Dla sprawdzenia jako pierwszą instrukcję za $().hover umieściłem alert i nie działa.

Czy da się to w ogóle zrobić?
Czy strona utworzona przez js jest dla jquery widoczna?
Dzięki za każdą konstruktywną radę.Mirosław Sadowski edytował(a) ten post dnia 30.07.11 o godzinie 01:48
Mirosław Sadowski

Mirosław Sadowski właściciel, zpo grim

Temat: Jquery na stronie zmodyfikowanej przez javascript

Któryś z innych postów podsunął mi rozwiązanie .
Zamieniłem hover na live i hula.
W Golden line samo sformułowanie problemu pomaga.

konto usunięte

Temat: Jquery na stronie zmodyfikowanej przez javascript

Warto poczytać - http://jupiterjs.com/news/why-you-should-never-use-jqu...

W ramach alternatywy - http://api.jquery.com/delegateWaldek Mazurek edytował(a) ten post dnia 30.07.11 o godzinie 08:42

konto usunięte

Temat: Jquery na stronie zmodyfikowanej przez javascript

Uzywaj delagate, nie live.

Roznica w tempie dolaczania eventu live vs. delegate moze byc nawet x30 krotna.
A w dodatku jesli uzyjesz live, a na stronie masz duza ilosc elementow, zabijesz przegladarke, ktora kazdy click bedzie chciala przeleciec twoje wszystkie live'y - problem nie istnieje z delegate (no chyba ze dodac to do calego body) ;)Andrzej Winnicki edytował(a) ten post dnia 30.07.11 o godzinie 10:39
Piotr Zimoch

Piotr Zimoch JavaScript Developer

Temat: Jquery na stronie zmodyfikowanej przez javascript

Andrzej Winnicki:
Uzywaj delagate, nie live.

Roznica w tempie dolaczania eventu live vs. delegate moze byc nawet x30 krotna.
A w dodatku jesli uzyjesz live, a na stronie masz duza ilosc elementow, zabijesz przegladarke, ktora kazdy click bedzie chciala przeleciec twoje wszystkie live'y - problem nie istnieje z delegate (no chyba ze dodac to do calego body) ;)

Od wersji jQ 1.4 mozna dodać context do funkcji live i wynik jest porownywalny z delegate.

konto usunięte

Temat: Jquery na stronie zmodyfikowanej przez javascript

Piotr Zimoch:
W sumie nie uzywalem nigdy live context.... hmmm
Ale sprobowalem by zobaczyc jaki faktycznie wynik to daje.

cachedByID.delegate(".fourthLayer", "click", function(){
// test
});
= 894000 operations per second

vs.


$(".fourthLayer", cachedByID).live("click", function() {
// test
});
= 31571 operations per second

Obydwa teoretycznie powinny robic to samo, aczkolwiek delegate jest nadal drastycznie szybszy.
Piotr Zimoch

Piotr Zimoch JavaScript Developer

Temat: Jquery na stronie zmodyfikowanej przez javascript

Andrzej Winnicki:
Szkoda ze nigdy nie przeprowadzile benchmarka - rzeczywiste wynik mowi sam za siebie delegate >> live+context



Wyślij zaproszenie do