Ik ben me aan het verdiepen in jquery, en javascript in het algemeen, en was nu aan het proberen om text binnen de bijbehorende <pre> tags te selecteren zodra op bijbehorende button wordt geklicked.
Dus voor de duidelijkheid: klick button 1 -> selecteer text alleen binnen pre tag die er direct na komt, klick button 2 -> selecteer alleen text binnen pre tag die er direct na komt...
De code:
Raad eens, het werkt niet naar behoren
. Alleen IE die zijn eigen methodes er op nahoudt doet precies wat ik wil.
Firefox doet het ook goed, maar zodra je een tweede button aanklikt wordt de range uitgebreid. In het bovenstaande voorbeeld zou dan de text binnen allebei de pre tags geselecteerd worden. Niet wenselijk.
Opera en safari maken ook kuren zodra een tweede button aangeklikt wordt. Zij doen helemaal niks meer dan.
Op een of andere manier moet ik de range clearen, maar ik zie even niet hoe. deleteRange is geen optie, aangezien deze letterlijk de hele text verwijderd.
Het probleem zit dus in:
Of pak ik dit nou helemaal verkeerd aan?
Dus voor de duidelijkheid: klick button 1 -> selecteer text alleen binnen pre tag die er direct na komt, klick button 2 -> selecteer alleen text binnen pre tag die er direct na komt...
De code:
HTML:
1
2
3
4
5
| <button class="selectcode">Select Code</button> <pre>blaat text nummer 1</pre> <button class="selectcode">Select Code</button> <pre>blaat text nummer 2</pre> |
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| $('.selectcode').click(function () { // Standard compliant browsers if(document.createRange) { rangeToSelect = document.createRange(); rangeToSelect.selectNode(this.nextSibling.firstChild); curSelect = window.getSelection(); curSelect.addRange(rangeToSelect); return false; } // ie if(document.body && document.body.createTextRange) { range = document.body.createTextRange(); range.moveToElementText(this.nextSibling); range.select(); return false; } return false; }) |
Raad eens, het werkt niet naar behoren
Firefox doet het ook goed, maar zodra je een tweede button aanklikt wordt de range uitgebreid. In het bovenstaande voorbeeld zou dan de text binnen allebei de pre tags geselecteerd worden. Niet wenselijk.
Opera en safari maken ook kuren zodra een tweede button aangeklikt wordt. Zij doen helemaal niks meer dan.
Op een of andere manier moet ik de range clearen, maar ik zie even niet hoe. deleteRange is geen optie, aangezien deze letterlijk de hele text verwijderd.
Het probleem zit dus in:
JavaScript:
1
2
3
4
| rangeToSelect = document.createRange(); rangeToSelect.selectNode(this.nextSibling.firstChild); curSelect = window.getSelection(); curSelect.addRange(rangeToSelect); |
Of pak ik dit nou helemaal verkeerd aan?