/ JSCRIPT selektierten Text erweitern
Raik
- javascript
Hallo!
es geht um die zehnstelligen artikelnummern bei ebay, die man sich optional auch schin bei der suche anzeigen lassen kann.
mit document.selection.createRange().text kann ich im IE selektierten text auslesen.
wenn dieser text nicht match(/[1]{10}$/) entspricht (der user nur einen teil der nummer markiert hat), würde ich gerne die auswahl so erweitern, dass die ganze nummer erfasst wird.
das selection - objekt scheint aber schon keinen bezug mehr zum elementebaum zu haben, so dass ich mich von da nicht zum parentElement hochhangeln kann, um von dort aus den textknoten darunter auszulesen.
ich könnte mit document.body.createRange().text den text der seite auslesen und den selektierten text darin suchen. dann seine position bestimmen und nach "vorn" b.z.w. "hinten" erweitern, bis es "passt".
aber das ist fehleranfällig, weil substrings von artikelnummern ja u.U. gleich sein können.
hat jemand eine idee, wie, und ob man das lösen kann?
freundl. Grüsse aus Berlin, Raik
\d ↩︎
Hallo!
ich bin zufällig über die lösung für den IE gestolpert:
<script type="text/javascript">
<!--
document.onmouseup = handleEvent;
function handleEvent() {
a = document.selection.createRange();
a.moveToElementText(a.parentElement());
alert(a.text);
}
</script>
wenn das auch für den firefox/mozilla möglich ist,würde ich mich über einen hinweis freuen.
freundl. Grüsse aus Berlin, Raik
Hallo Raik.
ich bin zufällig über die lösung für den IE gestolpert:
Hm, die funktioniert IIRC aber nur, wenn die Nummer in einem eigenen Element steht. Innerhalb von Fließtext wird das auch nicht funktionieren bzw. es wird der gesamte Text eingefangen.
Freundschaft!
Siechfred
Hallo, Siechfred!
ich bin zufällig über die lösung für den IE gestolpert:
Hm, die funktioniert IIRC aber nur, wenn die Nummer in einem eigenen Element steht. Innerhalb von Fließtext wird das auch nicht funktionieren bzw. es wird der gesamte Text eingefangen.
ja. die artikelnummer steht aber zum glück bei ebay in einer eigenen tabellenzelle. :-)
freundl. Grüsse aus Berlin, Raik
Hallo Raik.
mit document.selection.createRange().text kann ich im IE selektierten text auslesen.
wenn dieser text nicht match(/[1]{10}$/) entspricht (der user nur einen teil der nummer markiert hat), würde ich gerne die auswahl so erweitern, dass die ganze nummer erfasst wird.
Das sollte mit moveEnd lösbar sein:
function check(artikel) {
var range = document.selection.createRange();
if ( artikel.length < 10 ) {
var diff = 10 - artikel.length;
range.moveEnd('character', diff);
}
alert(range.text); // 10 Stellen
}
Das geht allerdings nur dann, wenn der Benutzer ab der ersten Stelle ausgewählt hat. Wenn er z.B. Stelle 4 bis 7 ausgewählt hat, hast du IMHO keine Chance, das geradezubiegen. Du könntest zwar mit moveStart den Startpunkt der Selection ändern, dazu müsstest du aber wissen, was innerhalb der Artikelnummer markiert wurde, um die korrekte Verschiebung des Startpunktes vornehmen zu können.
Freundschaft!
Siechfred
\d ↩︎
Hallo, Siechfred!
Du könntest zwar mit moveStart den Startpunkt der Selection ändern, dazu müsstest du aber wissen, was innerhalb der Artikelnummer markiert wurde, um die korrekte Verschiebung des Startpunktes vornehmen zu können.
hehe :-D
grad noch was gefunden:
<script type="text/javascript">
document.onmouseup = handleKeyEvent;
function handleKeyEvent() {
a = document.selection.createRange();
a.expand("word");
alert(a.text);
}
</script>
*tadaaaAAAAAA!!!*
das funktioniert sogar mit fliestext. :-)
jetzt guck ich mal, was man da für den firefox noch drehen kann ....
freundl. Grüsse aus Berlin, Raik
Hallo, Siechfred!
jetzt guck ich mal, was man da für den firefox noch drehen kann ....
jetzt hab ich auch ne lösung für mozilla/firefox gefunden:
<script type="text/javascript">
document.onmouseup = handleEvent;
function handleEvent() {
a = window.getSelection();
alert(a.focusNode.data);
}
</script>
zumindest für meinen zweck funktioniert das, im fliestext selectiert es ganze, zusammenhängende absätze (wenn keine anderen html-elemente dazwischen stehen).
es gibt da noch eine methode extend(), aber da bin ich wegen meines begrenzten englisch noch nicht durchgestiegen bei den parametern.
allerdings muss ich sagen, dass microsoft seine proprietären sachen im msdn,ff. besser dokumentiert hat, als mozilla.org für den Moz/Firefox.
ich konnte jedenfalls nix besseres finden.
freundl. Grüsse aus Berlin, Raik
Hallo Raik.
jetzt hab ich auch ne lösung für mozilla/firefox gefunden:
<script type="text/javascript">
document.onmouseup = handleEvent;
function handleEvent() {
a = window.getSelection();
alert(a.focusNode.data);
}
</script>
Interessant, mir scheint, dass das Gecko-DOM nicht weniger proprietär ist als JScript.
es gibt da noch eine methode extend(), aber da bin ich wegen meines begrenzten englisch noch nicht durchgestiegen bei den parametern.
Meines ist zwar auch begrenzt, aber es sollte in etwa das Gleiche tun wie moveToElementText in JScript.
allerdings muss ich sagen, dass microsoft seine proprietären sachen im MSDN besser dokumentiert hat, als mozilla.org für den Moz/Firefox.
In der Tat, aber das scheint mir ein generelles Problem bei OpenSource-Projekten zu sein. Naja, ich möchte nicht wissen, wieviele Mitarbeiter Microsoft nur für die Dokumentationen im MSDN beschäftigt.
Freundschaft!
Siechfred