|
| marker alt med javascript Fra : scootergrisen |
Dato : 10-03-11 15:07 |
|
Med denne kode kan man market alt i en <textarea> :
document.getElementById(id).focus();
document.getElementById(id).select();
Men hvordan gør man hvis man vil marker alt i en <div> ?
| |
Martin Larsen (10-03-2011)
| Kommentar Fra : Martin Larsen |
Dato : 10-03-11 15:21 |
|
scootergrisen wrote:
> Men hvordan gør man hvis man vil marker alt i en <div> ?
function selectElementText(el, win) {
win = win || window;
var doc = win.document, sel, range;
if (win.getSelection && doc.createRange) {
sel = win.getSelection();
range = doc.createRange();
range.selectNodeContents(el);
sel.removeAllRanges();
sel.addRange(range);
} else if (doc.body.createTextRange) {
range = doc.body.createTextRange();
range.moveToElementText(el);
range.select();
}
}
var el=document.getElementById("mydiv")
selectElementText(el);
| |
scootergrisen (10-03-2011)
| Kommentar Fra : scootergrisen |
Dato : 10-03-11 15:37 |
|
Den 10-03-2011 15:20, Martin Larsen skrev:
> scootergrisen wrote:
>
>> Men hvordan gør man hvis man vil marker alt i en <div> ?
>
> function selectElementText(el, win) {
> win = win || window;
> var doc = win.document, sel, range;
> if (win.getSelection && doc.createRange) {
> sel = win.getSelection();
> range = doc.createRange();
> range.selectNodeContents(el);
> sel.removeAllRanges();
> sel.addRange(range);
> } else if (doc.body.createTextRange) {
> range = doc.body.createTextRange();
> range.moveToElementText(el);
> range.select();
> }
> }
>
> var el=document.getElementById("mydiv")
>
> selectElementText(el);
>
Tak det virker jo :)
| |
scootergrisen (10-03-2011)
| Kommentar Fra : scootergrisen |
Dato : 10-03-11 15:42 |
|
Er der en måde hvor jeg kan undgå at bruge id="" fordi det er der
egentligt ikke nogen grund til.
Kan man gøre sådan at det bare gælde for den næste <div> der kommer ?
Altså jeg har en knap man trykker på også vil jeg gerne have valgt alt
teksten i den efterfølgende <div>.
| |
Martin Larsen (10-03-2011)
| Kommentar Fra : Martin Larsen |
Dato : 10-03-11 16:36 |
|
scootergrisen wrote:
> Kan man gøre sådan at det bare gælde for den næste <div> der kommer ?
> Altså jeg har en knap man trykker på også vil jeg gerne have valgt alt
> teksten i den efterfølgende <div>.
Funktionen tager bare et hvilket som helst DOM element som parameter, så
du kan jo fodre den med hvad du vil. Det behøver ikke komme fra
getElementById().
Så kunsten er altså at vælge den næste div. Men helt ærligt er det nok
lettere at give div'en en id. Med mindre du bruger jQuery, så kan du let
udvælge stort set alle DOM elementer, også relativt i forhold til andre.
Men du kunne jo starte med at komme med et eksempel ...
Martin
| |
scootergrisen (10-03-2011)
| Kommentar Fra : scootergrisen |
Dato : 10-03-11 17:18 |
|
Den 10-03-2011 16:36, Martin Larsen skrev:
> scootergrisen wrote:
>
>> Kan man gøre sådan at det bare gælde for den næste <div> der kommer ?
>
>> Altså jeg har en knap man trykker på også vil jeg gerne have valgt alt
>> teksten i den efterfølgende <div>.
>
> Funktionen tager bare et hvilket som helst DOM element som parameter, så
> du kan jo fodre den med hvad du vil. Det behøver ikke komme fra
> getElementById().
>
> Så kunsten er altså at vælge den næste div. Men helt ærligt er det nok
> lettere at give div'en en id. Med mindre du bruger jQuery, så kan du let
> udvælge stort set alle DOM elementer, også relativt i forhold til andre.
>
> Men du kunne jo starte med at komme med et eksempel ...
>
> Martin
Det fordi jeg ikke er helt færdig med det så vil ikke uploade det endnu
for så ændre det hele min hjemmeside også så venter lige til jeg engang
har fået det mere på plads.
Men nu har jeg :
<button onClick="SelectAll('felt5596');">Marker alt</button>
<div id="felt5596">noget kode</div>
Det fordi tallet 5596 er et tilfældigt generet tal men da der er flere
på samme side er der jo chance for de kommer til at have det samme tal.
Hvis bare javascript kan vælge den første <div> efter <button> så ville
det være fint.
| |
Martin Larsen (10-03-2011)
| Kommentar Fra : Martin Larsen |
Dato : 10-03-11 18:01 |
|
scootergrisen wrote:
> Hvis bare javascript kan vælge den første <div> efter <button> så ville
> det være fint.
Wrap knap + div i en ydre div og brug så element.parentNode til at finde
den ydre div og derefter getElementsByTagName til at finde den ønskede div.
http://kreacom.dk/test/selectall.html
<script>
function SelectAll(el) {
selectElementText(el.parentNode.getElementsByTagName("div")[0])
}
</script>
<div>
<button onClick="SelectAll(this);">Marker alt</button>
<div>noget kode</div>
</div>
| |
scootergrisen (10-03-2011)
| Kommentar Fra : scootergrisen |
Dato : 10-03-11 18:20 |
|
Ok tak.
Nu vil jeg jo gerne have <button> inden i en <div> så jeg kan flytte
rundt på den så bliver parent jo den div som button er i.
Hvordan går man så ?
<div>
<div style="text-align:right;">
<button onClick="SelectAll(this);">Marker alt</button>
</div>
<div>noget kode</div>
</div>
| |
Martin Larsen (10-03-2011)
| Kommentar Fra : Martin Larsen |
Dato : 10-03-11 18:28 |
|
scootergrisen wrote:
> Nu vil jeg jo gerne have <button> inden i en <div> så jeg kan flytte
> rundt på den så bliver parent jo den div som button er i.
Ved ikke lige hvad du mener, men i min kode kan du godt flytte rundt på
den. Bare flyt på den ydre div.
| |
scootergrisen (10-03-2011)
| Kommentar Fra : scootergrisen |
Dato : 10-03-11 18:38 |
|
Den 10-03-2011 18:27, Martin Larsen skrev:
> scootergrisen wrote:
>
>> Nu vil jeg jo gerne have <button> inden i en <div> så jeg kan flytte
>> rundt på den så bliver parent jo den div som button er i.
>
> Ved ikke lige hvad du mener, men i min kode kan du godt flytte rundt på
> den. Bare flyt på den ydre div.
Jeg vil gerne have knappen i sin egen <div>
| |
Martin Larsen (10-03-2011)
| Kommentar Fra : Martin Larsen |
Dato : 10-03-11 19:37 |
|
scootergrisen wrote:
> Jeg vil gerne have knappen i sin egen <div>
Jamen det er den jo allerede!
<div> <!-- Knappen er inde i denne div -->
<button onClick="SelectAll(this);">Marker alt</button>
<div>noget kode</div>
</div>
| |
Martin Larsen (10-03-2011)
| Kommentar Fra : Martin Larsen |
Dato : 10-03-11 20:21 |
|
Martin Larsen wrote:
> scootergrisen wrote:
>
>> Jeg vil gerne have knappen i sin egen <div>
>
> Jamen det er den jo allerede!
Som sagt, den er allerede i sin egen div som du derfor kan flytte rundt
på. Nemmere kan det vel ikke være.
Alternativt kan du ændre funktionen til :
function SelectAll(el) {
selectElementText(el.nextSibling.nextSibling)
}
hvis du ved at div'en altid kommer lige efter knappen. Jeg har ændret
onlineeksemplet så den bruger dette i stedet.
Læs mere her:
http://onlinetools.org/articles/unobtrusivejavascript/chapter2.html
| |
scootergrisen (27-04-2011)
| Kommentar Fra : scootergrisen |
Dato : 27-04-11 03:40 |
|
Hej igen nu har jeg opdaget et problem med koden.
Hvis jeg har noget kode sådan her...
<div>
<code>
<?php
her er noget kode
?>
</code>
</div>
Også trykker på "marker alt" knappen og kopier teksten så kommer der
et mellemrum med til sidst så hvis man sætter teksten ind i et tekst
redigeringsprogram så står der følgende (uden ")
"<?php"
"her er noget kode"
"?> "
Læg mærke til mellemrummet til sidst.
Hvordan undgår jeg at javascript tage det ekstra mellemrum med ?
Jeg bruger som en midlertidig løsning dette :
<div>
<code>
<?php
her er noget kode
?></code></div>
Så kommer der ikke noget mellemrum men jeg ville fortrække ikke at
lave om på HTML koden med hellere løse det i javascript.
Eksempel kan ses her : http://scootergrisen.dk/phpgrisen/kode_strenge.php
| |
Martin Larsen (27-04-2011)
| Kommentar Fra : Martin Larsen |
Dato : 27-04-11 22:26 |
|
scootergrisen wrote:
> Læg mærke til mellemrummet til sidst.
>
> Hvordan undgår jeg at javascript tage det ekstra mellemrum med ?
Betyder det mellemrum noget i praksis?
| |
scootergrisen (28-04-2011)
| Kommentar Fra : scootergrisen |
Dato : 28-04-11 09:43 |
|
> Betyder det mellemrum noget i praksis?
Det betyder at der kommer et mellemrum med fordi alt efter ?> andet
end newline kommer med i outputtet.
Det vil sige hvis nu den fil blev indkluderet fra en anden fil så kom
det et mellemrum med før outputtet fra den fil.
Så for eksempel "<html>....." bliver til " <html>.....".
Også hvis nu man have et script som skulle generer et billede eller
viderestille så vil det ikke virke.
Det er ikke det største problem at have men det ville da være rart
hvis det ikke var der så det blev mest mulig korrekt.
Altså at brugerne kunne bruge "marker alt" knappen til at marker og
kopier koden som den originalt er og ikke som den næste skal være.
| |
Martin Larsen (28-04-2011)
| Kommentar Fra : Martin Larsen |
Dato : 28-04-11 22:24 |
|
scootergrisen wrote:
> Det er ikke det største problem at have men det ville da være rart
> hvis det ikke var der så det blev mest mulig korrekt.
> Altså at brugerne kunne bruge "marker alt" knappen til at marker og
> kopier koden som den originalt er og ikke som den næste skal være.
Er det kun hvis du bruger <code> at problemet opstår?
Uanset hvad er løsningen nok noget JS der fjerner linjeskift i
html-opmarkeringen inden kopieringsfunktionen kaldes. Altså så du ikke
selv skal ændre html-koden.
Martin
| |
scootergrisen (29-04-2011)
| Kommentar Fra : scootergrisen |
Dato : 29-04-11 05:15 |
|
> Er det kun hvis du bruger <code> at problemet opstår?
Nej det har ikke noget med at gøre om det er <code> eller hvad det er.
Det kommer an om <XXXX> kommer lige efter koden eller om der er
linieskift og mellemrum.
Virker fint :
noget kode</code></div></div>
Giver mellemrum :
noget kode
</code>
</div>
</div>
Jeg vil jo hellere have at html koden står flot opstillet istedet for
det står ud i en linie.
> Uanset hvad er løsningen nok noget JS der fjerner linjeskift i
> html-opmarkeringen inden kopieringsfunktionen kaldes. Altså så du ikke
> selv skal ændre html-koden.
Men linieskift skal jo også kopiers med bare ikke det alle sidste
mellemrum med mindre det er et bevidst mellemrum som skal med og
derfor kan jeg ikke bare sige slet det sidste tegn hvis det er et
mellemrum for hvad nu hvis det er et bevidst mellemrum som jeg ønsker.
Hmmm måske skal jeg bare lade det stå ud i en linie.
| |
Martin Larsen (29-04-2011)
| Kommentar Fra : Martin Larsen |
Dato : 29-04-11 12:47 |
|
scootergrisen wrote:
> Men linieskift skal jo også kopiers med bare ikke det alle sidste
> mellemrum med mindre det er et bevidst mellemrum som skal med og
> derfor kan jeg ikke bare sige slet det sidste tegn hvis det er et
> mellemrum for hvad nu hvis det er et bevidst mellemrum som jeg ønsker.
Jeg har en ide. Skal lige tygge på den, så regn først med et forslag
mandag-tirsdag.
Martin
| |
|
|