-->
Använd jQuerys EndsWith för att slippa ha din javascript kod i html dokumentet när ASP.NET ändrar ClientID

Hej, återigen så är jag här med en kort screencast.

Denna gång handlar det om hur man kan ha sin javascript kod i en extern fil och ändå jobba mot element som ASP.NET har ändrat ID på.

När vi jobbar i ASP.NET Web Forms och masterpages så lägger .NET till info i ID attributet, t ex id=”two” blir id=”ctl00_ContentPlaceHolder1_two”, om man då ska komma åt elementet med jQuery så får man mecka lite.

Ett vanligt alternativ är att skriva sin javascript direkt i htmlsidan och använda <%=two.ClientID%> dår får man ut hela ctl00_ContentPlaceHolder1_two och kan på så vis referera till det elementet. Visst det fungerar alldeles utmärkt, men man vill ju inte ha massa javascript direkt i sidan utan det vill man helst ha i en extern *.js fil.

Då kan du utnyttja jQuerys EndsWith det man gör då är att skriva $(‘[id$=two]‘) det jQuery gör då är att gå igenom _alla_ id attribut på hela sidan och ser om det slutar på two.

Prestandan blir såklart lidande i detta fallet, men i väldigt många fall vet du ju vilket element du vill leta efter t ex en div $(‘div[id$=two]‘) då letar jQuery igenom alla divar som har ett id som slutar på two, i ett test borta hos Dave Ward så visar den att detta halverade tiden, kan man sen minska elementen den behöver leta igenom ännu mer, t ex $(‘div.blogpost[id$=two]‘) så är man väldigt nära samma prestanda som $(‘#two’) dvs getElementById()

Ladda hem källkoden

Prenumerera på dattaproffs.se
Följ mig på twitter

Originalartikel och benchmark på encosia.com

Ha det bra och lev å må!


  • Fredrik Berggren
    Hej Markus,

    Om du kollar på länken vid "Originalartikel och benchmark på encosia.com" så ser du en genomgång av just prestandan.

    Läs även:
    "Prestandan blir såklart lidande i detta fallet, men i väldigt många fall vet du ju vilket element du vill leta efter t ex en div $(’div[id$=two]‘) då letar jQuery igenom alla divar som har ett id som slutar på two, i ett test borta hos Dave Ward så visar den att detta halverade tiden, kan man sen minska elementen den behöver leta igenom ännu mer, t ex $(’div.blogpost[id$=two]‘) så är man väldigt nära samma prestanda som $(’#two’) dvs getElementById()"

    Men du har helt rätt, absoluta idn använder getElementById vilket är snabbast, men det går att komma väldigt nära.
  • Tja!

    Grym idé, hörde dock en podcast ifrån dot net rocks där det pratades om att denna metod söker igenom hela domen och därför kräver mkt kraft ifrån clienten.

    Påstående: Att använda absoluta idn är att föredra ur ett prestanda perspektiv.

    Hur är det någon som känner igen detta? Någon som tycker att påståendet är felaktigt?
  • Name
    Okey vad bra,
  • Fredrik Berggren
    Hej "Namn", jag vet inte vad som hänt, men jag håller på och meckar med flerspråksstöd, och din andra kommentar är absolut inte borttagen. Däremot verkar det som att den hör till den engelska sidan.

    Ska se om det inte blir rätsida på det snart.
  • Namn
    Tar du bort kommentarer med? Det var ju ganska oseriöst.
  • Name
    Inte dags för ett nytt inlägg snart?
blog comments powered by Disqus