Problemer med limit på variabler

Tags:    javascript

<< < 12 > >>
Hej

Jeg bakser rundt med en shop hvor der skal være en "vis mere info" knap. Tanken er, at der vises et udsnit (300 tegn) af produktbeskrivelsen og så kan kunden vælge at vise resten af teksten ved at trykke på en knap. Det virker fint ved tekster af en størrelse på 500-1000 tegn (ca.), men bliver teksten stor, så vises intet (jeg benytter substr).

Koden kan ses her http://pastebin.com/m1f7b2440

Et eksempel på en produktbeskrivelse der virker ses her http://pastebin.com/m42b4b739

Et eksempel på en produktbeskrivelse der ikke virker kan ses her http://pastebin.com/m6cec1f3a

På forhånd mange tak.



12 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
antager at [[Description]] har noget med et template system at gøre og at det bare bliver skiftet ud med de tekster de viser, hvis det er tilfældet fejler din kode formentlig på den anden beskrivelse fordi den indeholder ' tegn som bruder javascript strengen.

Endvidere har din teknik det problem at dine tekster har HTML tags så når du bare cutter et sted kan du risikere at ende med åbne tags og du risikere også at få tekster på mindre end 300 visuelle tegn f.eks.

var desc = '<div>text</div>'.substr(0,5)+"...";

ville ikke vise noget som helst og lave en åben div, substringen er '<div>'



Foreslog ikke at han fjernede markuppen. Han skal bare bruge en teknik der tager højde for dem.


Nej jeg var også bare enig i at du nok var på rette spor, men kom ikke med en løsning.



For eksempel kunne han gennemløbe strengen for hver character lægger en til tælleren i og hver gang han måde < sætter han inTag til true, for hver character hvis inTag er false læg en til tælleren j, hvis j lig 300, tag de i første character af strengen og forclose alle åbne tags vis strengen som den forkortede description.


... Der skal nok liiiiiiidt mere til, hvordan ved intag hvilket tag der skal lukkes og hvordan, hvad hvis strengen efter 300 tegn er i et <br/> eller hvad hvis der er ulukkede divs/p tags - ik helt gennemtænkt.


@Kasper -> Kan du linke ind til den side, det kan sikkert escapes, så det fungere.



Indlæg senest redigeret d. 18.02.2010 16:35 af Bruger #5789
enig, fjern dit markup først..

ex

var htmlstreng = "....";
var streng = htmlstreng.replace(/(<([^>]+)>;)/ig,"");

og kør så en substring.

/J



Foreslog ikke at han fjernede markuppen. Han skal bare bruge en teknik der tager højde for dem.

For eksempel kunne han gennemløbe strengen for hver character lægger en til tælleren i og hver gang han måde < sætter han inTag til true, for hver character hvis inTag er false læg en til tælleren j, hvis j lig 300, tag de i første character af strengen og forclose alle åbne tags vis strengen som den forkortede description.





Nørden: Jeg tænker det er at skyde fluer med kanoner at begive sig ud i sådan en løsning. Nørdens løsning lyder mere simpel. Men tak for hjælpen.

Nørden: siden laves i en dandomain webshop løsning og den har det med at formatere lidt i koden. Den giver en fejlmelding på linjen:

var streng = htmlstreng.replace(/(<([^>]+)>;)/ig,"");

Når den linje er til stede så fejler siden og intet indhold vises (tilsyneladende dandomains måde at undgå fejl på siden). Fjerner jeg linjen, så vises resten af indholdet som normalt.



.... jeg har testet scriptet i en html fil på min computer og der virker det fint, så det må være dandomains formatering der ødelægger scriptet.



En sider hvor det ikke virker: http://www.mpixfoto.dk/shop/canon-eos-50d-2304p.html

En side hvor det virker: http://www.mpixfoto.dk/shop/lowepro-pro-roller-4147p.html

Lige nu eksekveres scriptet naturligvis ikke, da indholdet på hele siden så vil forsvinde. Jeg brugte nøjagtig det, du skrev.

Det er tydeligt, at beskrivelsen på den side, der ikke virker, er betydeligt længere end på den anden.



Det jeg skrev var faktisk helt gennemført til at finde det rigtige sted i en HTML tekst at bryde.

Tæller i tæller alle karakterer i strengen.
Tæller j tæller karakterer i strengen når inTag var false.
InTag sættes til true når den møder < og false når den møder >, j skal selvfølgelig ikke tælle < eller > med heller.
Når j er lig med 300 tages de i første karakterer af strengen.

Hvis på nogen måde kan for den kode til at stoppe inde i et tag <br/> vil jeg give dig ret i at det ikke var gennemført indtil da vil jeg påstå at det var.

forclose var inlysende nok en skrive fejl, skulle have være force close eller bare close alle åbme tags. Jeg skrev intet om hvordan han gjorde det, antog der muligvis var en eksisterende løsning.

ellers er det vel igen ikke så svært at lave en reg exp der fanger aller <TEXT...> og alle </TEXT...> så det jo bare et spørgsmål om at gennemløbe den liste for hver <TEXT put text på en stack for hver </TEXT tag den tilsvarende <TEXT af stakken og pop <TEXT fra stakken. Hvis stakken ikke er tom skriver append </TEXT til teksten for hvert element i stakken.

Antager at html var valid i den originale tekst til at begynde med.



Til den original poster så vil det her altid fejle:
Fold kodeboks ind/udKode 


læg mærke til 50D's ' tegnet vil bryde din javascript streng.




Indlæg senest redigeret d. 18.02.2010 21:06 af Bruger #5620
Nørden: Jeg må erkende at jeg ikke er ferm nok til Javascript til at jeg kan finde rundt i den forklaring du kommer med. Jeg antager at du har ret :-)

Se det kunne jo godt have noget med ' at gøre. Jeg prøver lige at se om ikke jeg kan strippe slashes e.l.



adde slashes, skulle der have stået der. men det løser desværre ikke problemet.

Jokke: Linket er sendt oven for.



<< < 12 > >>
t