Eh, kako se nekad skenjam.
Radim neki projekat, i koristio sam do malo pre prototype.lite.js staru dobrih 6+ meseci
I sad imam jednu ogromnu stranicu i njoj 3 poziva tipa:
Kôd:
window.onload = function() {
elementsA = document.getElementsByClassName('classA');
elementsB = document.getElementsByClassName('classB');
elementsC = document.getElementsByClassName('classC');
Inace document.getElementsByClassName je jedna veoma korisna f-ja koja dolazi uz prototype, spasava zivce i vreme....
Medjutim kako se stranica punila iz CMS-a i kako je struktura strasno komplexna (mnogo fancy efekata, i sto je najgore mnogo ugnjezdjenih elemenata) vremenom je se cela stvar jako usporila, zato sto ova f-ja prolazi kroz sve tagove na stranici, i pomocu regExpa gleda da li taj tag ima tu i tu klasu, znaci u mom slucaju 3x prolazi celu stranicu od pocetka pa do kraja
krenem ja tu da googlam, gledam kako da ubrzam stvar, vec sam se pomirio da cu da udarim id="clasaA"+{$i}, pa da kroz tri petlje getujem sve elemente..
i onda slucajno vidim da nova verzija prototype-a ima XPath podrsku... Sad ja znam da to moze samo u FF, eventualno u novoj operi.. al ajde ne budem lenj, zamenim malecki lite.js sa najnovijom full verzijom (74kB), nista drugo nisam menjao, cisto experimenta radi...
kad ja tamo, a ono medjutim:
ne da radi nego razbija, uopste ne prolazi celu stranicu, vec kupi samo relevantne elemente.. (naravno samo u FF)
Eh al sta vredi, u IE cisto mala promena zbog optimizovanije nove verzije. Nema veze, bio sam iskreno srecan dobrih 2-3 minuta
vise se uopte i ne nerviram zbog ovakvih stvari.. Skoro da mi je smesno...
za 3 godine ce valjda da izbace neki SPXXX koji ce da ima patch za IE i Xpath, to je i onako trivijalna i nevazna stvar...
Off Topic:
a evo i kako izgleda nova f-ja, jos kad bi Xpath svuda normalno radio, sve posle else bi bio visak...
Kôd:
document.getElementsByClassName = function(className, parentElement) {
if (Prototype.BrowserFeatures.XPath) {
var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
return document._getElementsByXPath(q, parentElement);
} else {
var children = ($(parentElement) || document.body).getElementsByTagName('*');
var elements = [], child;
for (var i = 0, length = children.length; i < length; i++) {
child = children[i];
if (Element.hasClassName(child, className))
elements.push(Element.extend(child));
}
return elements;
}
};
btw, ne radi spoiler tag.. jel bese radilo to pre na forumu ???