Reklama: Twoja konkurencja już Cię wyprzedziła SPRAWDŹ JAK

Stwórz profil

Musisz wpisać swoje imię
Musisz wpisać swoje nazwisko
Musisz wpisać poprawny e-mail
Musisz wpisać hasło (min. 8 znaków)
Musisz zaakceptować regulamin

Przemysław Godlewski Own company/PHP
programmer/Web
Developer

Temat: jquery - pytanie o selektor

Witam

Prosze o pomoc:

jak dotrzec w jquery np do wszystkich elementow IDs (albo klasy), ktore sa wieksze rowne od np "entry120" a mniejsze rowne od np "entry155", w takim kodzie ponizszym:

<div id="entry10">tekst</div>
<div id="entry124">tekst</div>
<div id="entry136">tekst</div>
...
<div id="entry199">tekst</div>
<div id="entry220">tekst</div>

chce wszystkie elementy np pomiedzy entry120 - entry155 pokazac (display:block albo fadeIn), a pozostale poza tym zakresem ukryc (display:none, albo fadeout)

Numery przy "entry", nie ida po kolei co jeden w góre, ale sa to liczby rosnące.

Chodzi o to ze ich moge miec kilka tys nawet i nie chce tego robic w petli javascript, w jquery bedzie szybciej.

Wiem ze sa w jquery selektory ktore sprawdzaja czy element zaczyna sie na cos, czy konczy, ale czy istnieja selektory zakresowe, "wieksze od", "mniejsze od" ??

Za kazda pomoc z gory dziekuje.Przemysław Godlewski edytował(a) ten post dnia 03.02.12 o godzinie 19:04
3.02.2012, 18:52

Sebastian Zaborowski programista /
webmaster /
freelancer

Temat: jquery - pytanie o selektor

Nie znam takich. Rozwiązanie jakie przychodzi mi do głowy dodać atrybut do każdego DIV'a przechowujący właściwą liczbę z ID. Wtedy kombinujesz dalej, ale obawiam się, że bez pętli się nie obejdzie.
3.02.2012, 19:12

Grzegorz K. try{ New Call ({at:
this.person.phone});
}catch(e){ New M...

Temat: jquery - pytanie o selektor

http://api.jquery.com/multiple-selector/
3.02.2012, 19:12

Przemysław Godlewski Own company/PHP
programmer/Web
Developer

Temat: jquery - pytanie o selektor

w sumie dla np zapytania pokaz divy od id entry500 do entry750, moglbym zrobic tak:

1. utworzyc w js dynamicznie ciag znakow w petli:

var hideDivs="#entry1, #entry2, #entry3, .. #entry[n] .. #entry499";

var showDivs="#entry500, #entry501, #entry502, .. #entry[n] .. #entry750";

i potem funkcją eval() podac to do jquery:

$(hideDivs).fadeOut();
$(showDivs).fadeOut();

Tylko ze nie wiem jak dlugi moze byc podany taki ciag znakow do jquery, jesli bede mial nawet kilkanascie tys elementow? I nie wiadomo jak to bedzie szybko dzialac.
3.02.2012, 19:31

Andrzej Winnicki Frontend Architect,
Developer &
Magician

Temat: jquery - pytanie o selektor

w petli zrob lepiej array
hideDivs {'entry1', 'entry2'}
to samo dla show ;)

a ppotem zrob
for (var key in hidedivs) {
$(hideDivs[key]).fadeOut();
}

i pojdzie szybciutko i gladziutko ;)
Wydaje mi sie ze to co pokazales zrobi to samo, rownie dobrze ;) (i nie, nie potrzebujesz evala tutaj).
W zwiazku z tym ze mowa o DUZYCH liczbach itemow odpal jsperf.org i sprawdz dwa przyklady i sie doweisz ktory dziala lepiej ... pochwal sie bo tez chetnie sie dowiem :D

Jako trzecia opcje, dodaj do swoich elementow klase.. i wybierajac ja selektorem np $('.myObject') mozesz pozniej mu kazac zrobic dla idnexow 500-750 huide a dla indexow 750-100 show ;)

tez chetnie sie dowiem predkosciowo to wyjdzie w porownaniu do poprzednich opcjiAndrzej Winnicki edytował(a) ten post dnia 03.02.12 o godzinie 20:07
3.02.2012, 20:03

Przemysław Godlewski Own company/PHP
programmer/Web
Developer

Temat: jquery - pytanie o selektor

no wlasnie..

ale po to chce uzyc jquery aby jquery samo znalazlo zakresy, a nie zebym to robil w petli js. Jak mam robic w petli, to rownie dobrze moge w petlach uzyc getElementById().style.display=none i to jest to samo.

A mi chodzi o to zeby nie robic petli:

od i=0;i<20000 => ukryj divy "entry"+i

i>=20000 oraz i<=30000 => pokaz divy "entry"+i

i>=30000 i<= jakis max => ukryj divy "entry"+i

przy kilkunastu tys juz bedzie pare sekund zawieszenia strony. A tego chce uniknac wlasnie.
3.02.2012, 20:44

Przemysław Godlewski Own company/PHP
programmer/Web
Developer

Temat: jquery - pytanie o selektor

A umiesz ponizsza Twoją sugestie zapisac bez petli w jquery, aby dla wszystkich divow pomiedzy 500 a 750, ktore mają klasę .myObject ukrył je, albo od zera do 500, albo od 750 do konca ??? to jest wlasnie clue tego zagadnienia.

Jako trzecia opcje, dodaj do swoich elementow klase.. i wybierajac ja selektorem np $('.myObject') mozesz pozniej mu kazac zrobic dla idnexow 500-750 huide a dla indexow 750-100 show ;)

Znalazlem juz pewien sposob, ale tez jest troche na około. Zakladajac ze divy sa numerowane zawsze od zera do max wartosci, jesli chce pokazac divy z zakresu minid-maxid, to mozna tak:

1. za pomoca minIndex=eq("entry"+ minid) znalezc pozycje min jako index tego elementu w html;
2. za pomoca slice(0,minIndex) ukryc divy
3. za pomoca maxndex=eq("entry"+ maxid) znalezc pozycje max jako index tego elementu w html;
4. za pomoca slice(minIndex, maxIndex-minIndex) chyba:) pokazac divy
itd..

ale to wymaga wrzucenia w kod pustych divow z kolejnymi id, bo jak nie bedzie id liczone pokolei co jeden, to slice zle policzy odleglosci.

Ale ja bede mial sytuacje ze moje id liczone beda czesto skokowo, a nie co jeden.
3.02.2012, 20:58

Andrzej Winnicki Frontend Architect,
Developer &
Magician

Temat: jquery - pytanie o selektor

Przemysław Godlewski:
moge w petlach uzyc getElementById().style.display=none i to jest to samo.

I TAK WLASNIE powinnies zrobic!
JEsli mozesz zrobic cos czystym JS, zrob to! Myslalem ze zalezy ci na fadech, ale jesli chcesz tylko miec efekt, zrob to na czystym JS.. wykona sie 1000x szybciej :) zwlaszcza po ID.

jQuery to nie jest wyrocznia i wielu ludzi ktorzy go uzywaja, nie maja pojecia ze moga zrobic wiele podobnych rzeczy, ktore wykonaja sie szybciej za pomoca czystego JS ;)

Co do pytania nastepnego.
$('.myObject').each(function(index) {
if (index>750 && index<1000) $(this).fadeOut('fast');
if else (cos innego)
});

Wiesz.. jhesli robisz jakas paginacje czy cos (zgaduje) to zrob by ustawial vara startFrom=750
i go uzyj tutaj :)
if (index>startFrom)

ps.. nie jestem pewien ale moze da sie jakos dla selektorow ograniczyc wybor odrazu, by zaczal od np 750tego znalezionego... trzeba przytulic manuala albo pana google zapytac.
ps. pisze po 3 piwach juz, wiec syntax moze sie troche nie zgadzac, ale mniej wiecej tak powinno dzialac ;)Andrzej Winnicki edytował(a) ten post dnia 03.02.12 o godzinie 21:31
3.02.2012, 21:29

Sebastian Zaborowski programista /
webmaster /
freelancer

Temat: jquery - pytanie o selektor

Andrzej Winnicki:
Co do pytania nastepnego.
$('.myObject').each(function(index) {
if (index>750 && index<1000) $(this).fadeOut('fast');
> });

Wszystko spoko, tylko że index stworzy się według występowania w drzewie DOM, a nie według ID, alfabetycznieSebastian Zaborowski edytował(a) ten post dnia 03.02.12 o godzinie 21:36
3.02.2012, 21:34

Piotr L. projektowanie user
experience,
interakcji,
architektura i...

Temat: jquery - pytanie o selektor

jeżeli używasz HTML5 to nadaj elementom atrybuty data-id i dalej pętla po numerach id...
3.02.2012, 22:32

Paweł Nitka www.id2it.pl

Temat: jquery - pytanie o selektor

stwórz sobie własny selektor w jQuery - wyjściowy kod js z przykładem użycia będzie mniej więcej taki:

$.expr[':'].getByIndex = function(obj, index, meta, stack){
var from = meta[3].split(',')[0],
to = meta[3].split(',')[1],
indx = obj.id.replace(/[\D]+/g,'');

if(indx >= from && indx <= to) {
return true;
} else {
return false;
}
};
console.debug($('#container').find('.entry:getByIndex("20,25")'));


dla takiego drzewa:
<div id="container">
<div class="entry" id="entry20"></div>
<div class="entry" id="entry50"></div>
<div class="entry" id="entry40"></div>
<div class="entry" id="entry22"></div>
<div class="entry" id="entry23"></div>
<div class="entry" id="entry24"></div>
<div class="entry" id="entry25"></div>
</div>


da ci to wynik:

[div#entry20.entry, div#entry22.entry, div#entry23.entry, div#entry24.entry, div#entry25.entry]


założyłem tu, że nie używasz innych liczb w atrybucie id.
możesz zmodyfikować kod już dokładnie pod twoje potrzeby i nie będziesz miał problemów z jego używaniem w dowolnym momencie...
8.02.2012, 14:30



Wyślij zaproszenie do