05. juli 2002 - 23:53Der er
8 kommentarer og 1 løsning
Hvordan identificerer man ordet der klikkes på i IE5.5+?
Jeg savner at finde ud af hvordan man identificerer det ord brugeren klikker på - enten med venstre eller højre museknap (IKKE dobbeltklik). Resultatet skal bruges til syntetisk tale (oplæsning).
Når vi to ser <b> Her står en masse tekst </b> er vi begge to intelligente nok til at se at der er 5 ord med fed skrifttype, men så klog er en computer desværre ikke. det ser kun <b (I MUST RENDER THIS NODE BOLD)> DATA (THIS DATA MUST BE RENDERED BOLD) </b (I MUST STOP RENDERERING BOLD AND FINALIZE THIS NODE)> Vi kan sagtens få fat i den data, der er i mellem <b></b>, men vi kan ikke få den til at forstå hvad der er enkelte ord og ikke. Under alle omstændigheder ser et bud på en kode således ud: <script> document.onclick = function(e) { target = (document.all)?event.srcElement.firstChild:(document.getElementById)?e.target:null; if (target!=null&&target.nodeType==3) alert(target.data); } </script> Håber det er til hjælp.
Tak til maddog for budet - det bedste indtil videre. Betyder det virkelig at jeg ikke kan slippe for at gøre hvert ord til et objekt? Jeg ville gerne om det var muligt blot at finde indholdet af eksempelvis ord nummer 3 i en given <span>-tag ... any takers?
jamen det er da muligt at spalte det man får op i enkelte ord. Vi kan bare ikke vide hvilket ord der er klikket på. Øjeblik så laver jeg en lækker lækker StringTokenizer til dig. Tager nok en ½times tid.
<script> function StringTokenizer(Str) { this.buffer = (Str+"").split(' '); // array af ord this.count = -1; // start the parser below the array } StringTokenizer.prototype.next = function() { if (this.count>=this.buffer.length-1) return false; this.count++; // move forward return this.buffer[this.count]; // return the token } StringTokenizer.prototype.nextWord = function() { if (this.count>=this.buffer.length-1) return false; this.temp = this.next().replace(/[^A-Za-zæøåÆØÅ]/g,''); // return the token clear of non letters if (this.temp=="") return this.nextWord(); // lidt rekurtion for de vilde else return this.temp; } StringTokenizer.prototype.tokenAt = function(num) { return this.buffer[num]; // return the token at the index } StringTokenizer.prototype.wordAt = function(num) { return this.buffer[num].replace(/[^A-Za-z]/g,''); } StringTokenizer.prototype.load = function(Str) { this.buffer = Str.split(' '); this.count = -1; }
// anvendelser var word = "2"; document.onclick = function(e) { target = (document.all)?event.srcElement.firstChild:(document.getElementById)?e.target:null; if (target!=null&&target.nodeType==3) { var sT = new StringTokenizer(target.data); i=0 while (word && i!=3) { word = sT.nextWord(); i++; }// gennem løber alle ord til ord 3. alert(word); } } // man kan selvfølgelig gå ind og kigge på st.buffer[3], men ved denne metode kan vi effektivt frasortere sludder løbende. </script>
nu ligger jeg et svar. bare for god ordens skyld. hvis du ikke føler problemet er ordentligt løst skal du bare tage pointene tilbage.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.