Jeg er faldet over et website, der bruger jQuery til at styre forskellige layout ønsker, og til at hooke forskellige handlere op på events. Det sprang mig i øjnene, at sitet havde reference til JQuery 1.1, og jeg opdaterede selvfølgelig straks. Jeg havde brug for nogle af de animations effekter der kom med 1.3 - Det skulle jo ikke være noget problem vel? EEEEIk! Wrong answer. Hele skidtet brager ned, og primært på grund af nøglefunktionen i JQuery -
$(exp). Den melder:
Objektet understøtter ikke denne egenskab eller metode, når koden forsøger at lave følgende udvælgelse:
$("*[@behaviours='inputInitValue']").
Det viser sig nemlig at jQuery tidligere brugte XPath til at udfører sine søgninger i DOM’en med. Man fandt bare ud af at en mere optimeret søgning i kilde-html’en med regulære udtryk, performede langt bedre. Det jeg oplever her, er blot et grænsetilfælde af konverteringen, som den nye parser ikke kan håndterer.
Men hvad gør man så, når man har kode der tidligere kunne udvælge på tilstedeværelsen af en bestemt attribut værdi?
Det viser sig at man har valgt en syntaks, der er lidt mindre kryptisk – man har fjernet @ fra syntaksen, og så har man jo lige tilføjet et par ekstra features.
- Den simple: [attr], som udvælger elementer med den angivne attribut uanset værdi
- [attr=value], udvælger elemeter der har en attribut med en bestemt value
- [[attr!=value], som udvælger de elementer der har attributten, men som ikke har den angivne value
- Mere eksotisk: [attr^=value], som udvælger de elemeter der har en attributværdi der starter med value
- Endnu mere eksotisk: [attr$=value], som udvælger de attributter der har en værdi der ender med value
- [attr*=value], som udvælger elementer med en attributværdi der indeholder value
- Flere attributfiltre kan tilføjes ved at man kæder dem: [attr1=value][attr2=value] osv.
Ved første øjekast, ser det måske lidt kryptisk ud, men kender man RegExp, kan man hurtigt se at der er en linje i syntaksen, og den er ret nem at huske.
Det API er bare så fyldt med gode sager, og jeg bliver dagligt forundret over de måder man kan kode JavaScript på med hjælp fra jQuery.
Code on…