Autor Zpráva
anonymníí
Profil *
Ahoj, hledám nějaké řešení fungující napříč všemi prohlížeči, řekněme IE7+, které mi vybere všechny elementy, které mají konkrétní, mnou vybraný, data-attribut (řekněme data-count).

Efektivně umím zaměřit elementy jen pomocí ID, getElementsByClassName ne (podpora IE9+). Jak vybírat tyto elementy jinak, než abych je taxativně vyjmenoval podle jejich ID?

Děkuji.
Taps
Profil
anonymníí:
co jQuery ?
anonymníí
Profil *
Taps:
Děkuji, hledám pure-JS řešení. Nemám potřebu jen kvůli tomuto tahat do stránky jQuery. Přijde mi to zbytečné, obzvláště v případě, že na stránce je už X skriptů a bez jQuery jsem se obešel.

Jedná se o web mj. pro mobilní telefony a tablety (zkrátka mobilní připojení), kde očekávám návštěvnost v porovnání s desktopy v poměru cca 5:1, takže zbytečných 120kB (nebo kolik to je aktuálně) kódu nepřipadá v úvahu.

Podpora IE7+ samozřejmě kvůli desktopům, nechci sedmičkáře nechat bez těchto fíčur.
Taps
Profil
anonymníí:
a klasicky přes js getAttribute by to nešlo ?
Chamurappi
Profil
Reaguji na anonymníího:
Tam, kde není podpora pro document.querySelectorAll, použít document.getElementsByTagName("*") a na každém nálezu zkontrolovat getAttribute("data-attr").
CZghost
Profil
anonymníí:
jQuery ti usnadňuje používání JS a už nativně obsahuje podporu napříč prohlížeči. Jestli nechceš celý kód jQuery, pak zkus vyhledat forky odpovídající tvému požadavku. Když neuspěješ, tak se zkus podívat do kódu a vytáhnout pro tebe podstatné části. Nezapomeň na důležité prvky kódu, bez kterých by jQuery nefungovalo.

jQuery, ačkoliv je poměrně rozsáhlý, nezatěžuje chod počítače, protože deklarace jsou umístěny ve třídách, což efektivně člení javascriptový kód a umožňuje implementovat jen ty části kódu, které potřebuješ pro tu danou funkci.

Taps, Chamurappi:
Čekal jsem, že tak rychlá odpověď nepřijde :D No samo, i to je možné :)
Amunak
Profil
CZghost:
jQuery ti usnadňuje používání JS a už nativně obsahuje podporu napříč prohlížeči.
Ano. Za cenu ~80 kilobajtů kódu navíc. Taky někdy od jQuery 2.x se prakticky zahodila zpětná kompatibilita, takže starší prohlížeče můžou mít u nějakých obskurnějších funkcí smůlu. Na to, že řešení v čistém JS bude mít asi deset řádek, je to opravdu zbytečnost.
Chamurappi
Profil
Reaguji na CZghosta:
protože deklarace jsou umístěny ve třídách, což efektivně člení javascriptový kód a umožňuje implementovat jen ty části kódu, které potřebuješ pro tu danou funkci
Tomuhle nějak. Co tato reklamní vata znamená? Co myslíš těmi třídami? V JS nejsou třídy. Jak by to vypadalo, když se implementují i části kódu, které nejsou potřeba?

Nekompatibility mezi prohlížeči, na které si programátor bez jQuery musí opravdu dát pozor, se dají spočítat na prstech jedné ruky a vyřešit rychle i jen jedním z těchto prstů.


Reaguji na Amunaka:
takže starší prohlížeče můžou mít u nějakých obskurnějších funkcí smůlu
Nejen u obskurnějších, spadne to prakticky na všem.
_es
Profil
CZghost:
jQuery, ačkoliv je poměrně rozsáhlý, nezatěžuje chod počítače
A to „pomerne rozsiahle“ prehliadač spracuje/skompiluje asi ako, tak, aby „nezaťažoval počítač“?
CZghost
Profil
Amunak:
Taky někdy od jQuery 2.x se prakticky zahodila zpětná kompatibilita
Tak pochybuju, že by někdo se zdravým rozumem ještě používal IE šestku :D

Chamurappi:
Co tato reklamní vata znamená?
To zní jako propagace? Sakra, jsem to ale neřád :-)

V JS nejsou třídy
A jak je potom implementován jQuery a všechny jeho objekty? Bez tříd to prostě nejde. Jestli si budu chtít v javascriptu vytvořit nové objekty, musím to něčím obalit. Když ne třídou, tak čím? A jak vysvětlíš to magické slovíčko class?

_es:
Má to hledat deklaraci v třídách, ne jenom slepě implementovat veškerý kód, který natáhne. To ztrácí efektivitu. Jak myslíš že funguje Java? Tam se dokonce všechno musí řešit třídami, jinak program vůbec nefunguje. Překladač potom projíždí řádky kódu a interpretuje jenom ty části kódu, které jsou zapotřebí, kombinuje postupy a tím vlastně zrychlí celý program, kdežto, kdyby to slepě implementovalo každý kus kódu, který se namane, pak je celý program extrémě pomalý. Na podobném principu funguje i C, proto se tomu říká objektové programování. Pracuje s objekty.
anonymníí
Profil *
Chamurappi:
Děkuji, toho jsem se trochu bál, že budu muset procházet a kontrolovat vše (v rodiči, kterého jsem schopen blíže specifikovat). Lepší řešení asi skutečně není.

CZghost:
Bez komentáře, raději :-)
_es
Profil
CZghost:
A jak vysvětlíš to magické slovíčko class?
A v akom konkrétnom kóde v JS si to „slovíčko“ videl?

ne jenom slepě implementovat veškerý kód, který natáhne.
Prehliadač má predsa „implementovať“ všetok kód „čo natiahne“. Aký zmysel by mal potom ten „neimplementovaný“?

Na podobném principu funguje i C, proto se tomu říká objektové programování. Pracuje s objekty.
Nejako sa ti tie jazyky asi poplietli.
Chamurappi
Profil
Reaguji na CZghosta:
A jak je potom implementován jQuery a všechny jeho objekty?
V jQuery se nevyužívá skoro nic z javascriptových OOP rysů. Následná práce s ním je skoro čistě funkcionální.

A jak vysvětlíš to magické slovíčko class?
Slovo class je v JS sice vyhrazené, ale nemá vůbec žádný význam.

Jak myslíš že funguje Java?
Ta nemá s JS prakticky nic společného. Java se jednorázově kompiluje do bajtkódu a ten se pak za běhu dál kompiluje a interpretuje. U JavaScriptu ta první fáze chybí, protože prohlížeč nikdy dopředu neví, jaký skript vlastně stáhne. Načtení každé stránky a každého skriptu začíná od nuly, celý skript se musí přečíst a přelouskat… což vskutku není moc efektivní, ale takhle to prostě funguje. V jQuery se neschovává žádná magie, která by toto uměla obejít.

Na podobném principu funguje i C, proto se tomu říká objektové programování.
OOP označuje spíš filosofii návrhu a konstrukce programu, nesouvisí přímo s kompilačními postupy a optimalizacemi.
Fisir
Profil
Při použití jQuery to navíc může být trošičku pomalejší.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: