HighDots Forums  

Eigene Funktionen und IE Kompatibilität

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Eigene Funktionen und IE Kompatibilität in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Robert Zenz
 
Posts: n/a

Default Eigene Funktionen und IE Kompatibilität - 11-08-2007 , 02:26 PM






Nabend.

Meine erste Frage wäre folgende:
Ich hab eine eigene Funktion erstellt da ich eine Zeichenfolge in einen
Wert vergleichen.

function monthNumber() {
this.jan = 1;
this.feb = 4;
this.mar = 3;
...
}
monthNumber = new monthNumber();

Diese will ich dann später wieder abfragen. über monthNumber.jan ist
dies auch kein Problem, aber geht es das ich dies auch über eine
Variable abfragen kann anstatt direkt? Also monthNumer.flexVar (gibt
dann nach Inhalt von flexVar den entsprechenden Wert zurück). Mir war
klar dass das nicht so funktioniert, hab aber schon einige Kombinationen
durch, aber keine Lösung gefunden.

Die zweite betrifft IE. Ich will den selektierten Text in einem Textarea
mit Tags umgeben, dies mache ich bis jetzt über diese Funktion:

function insertSomething(entryField, insertText) {
//get the start and end of the selection
entryField.focus();
var selStart = entryField.selectionStart;
var selEnd = entryField.selectionEnd;

//split the text which should be inserted
var arrText = insertText.split('|');

//get the text which should be...arrr...advanced (or tuned...whatever)
var origText = entryField.value;
entryField.value = "";

if((selStart == 0) && (selEnd == 0)) {
entryField.value = origText + arrText[0] + arrText[1];
} else {
entryField.value = origText.slice(0, selStart) + arrText[0] +
origText.slice(selStart, selEnd) + arrText[1] + origText.slice(selEnd,
origText.length);
}
}

Die Eigenschaften selectionStart und End kennt aber der IE nicht (ich
arbeite mit Linux und Seamonkey). Gibt's da eine Zwischenlösung (ohne
Browserweiche?)

Mit Dank im voraus,
Rob

Reply With Quote
  #2  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Eigene Funktionen und IE Kompatibilität - 11-08-2007 , 05:42 PM






Robert Zenz wrote:
Quote:
Ich hab eine eigene Funktion erstellt da ich eine Zeichenfolge in einen
Wert vergleichen.

function monthNumber() {
Das ist ein Konstruktor, der Bezeichner sollte folglich mit einem
Grossbuchstaben beginnen.

Quote:
this.jan = 1;
this.feb = 4;
this.mar = 3;
...
}
monthNumber = new monthNumber();
So überschreibst Du den zuvor deklarierten Kontruktor gleich wieder.
OOP-technisch ist das Unsinn, denn dann hättest Du auch gleich

var monthNumber = {
jan: 1,
feb: 2,
mar: 3
...
};

schreiben können.

Quote:
Diese will ich dann später wieder abfragen. über monthNumber.jan ist
dies auch kein Problem, aber geht es das ich dies auch über eine
Variable abfragen kann anstatt direkt? Also monthNumer.flexVar (gibt
dann nach Inhalt von flexVar den entsprechenden Wert zurück). Mir war
klar dass das nicht so funktioniert, hab aber schon einige Kombinationen
durch, aber keine Lösung gefunden.
Möglicherweise suchst Du

monthNumber["jan"]

Das schreit jedoch stattdessen geradezu nach einem Date-Objekt.

Quote:
Die zweite betrifft IE. Ich will den selektierten Text in einem Textarea
mit Tags umgeben, dies mache ich bis jetzt über diese Funktion:
[...]
Die Eigenschaften selectionStart und End kennt aber der IE nicht (ich
arbeite mit Linux und Seamonkey). Gibt's da eine Zwischenlösung (ohne
Browserweiche?)
Ja:

if (typeof o.selectionStart != "undefined"
&& typeof o.selectionEnd != "undefined)
{
...
}
else
{
// Ansatz für MSHTML-DOM
}

Details siehe u.a. http://www.faqts.com/knowledge_base/...html/aid/13562

Das nächste Mal bitte zuerst eine Suchmaschine Deiner Wahl benutzen.


PointedEars
--
Aber das Sperren der rechten Maustaste hat auch seine Vorteile: so
bleibt uns der Anblick einer ganzen Menge dilettantisch und lieblos
zusammengewurstelten Quellcodes erspart. (Ulrich 'Droeppez' Kritzner in
http://selfhtml.de/forum/zeigebeitra...4&thread=31592)


Reply With Quote
  #3  
Old   
Robert Zenz
 
Posts: n/a

Default Re: Eigene Funktionen und IE Kompatibilität - 11-09-2007 , 03:19 AM



Thomas 'PointedEars' Lahn schrieb:
Quote:
Robert Zenz wrote:
Ich hab eine eigene Funktion erstellt da ich eine Zeichenfolge in einen
Wert vergleichen.

function monthNumber() {

Das ist ein Konstruktor, der Bezeichner sollte folglich mit einem
Grossbuchstaben beginnen.

this.jan = 1;
this.feb = 4;
this.mar = 3;
...
}
monthNumber = new monthNumber();

So überschreibst Du den zuvor deklarierten Kontruktor gleich wieder.
OOP-technisch ist das Unsinn, denn dann hättest Du auch gleich
Ich hatte das so verstanden es ich einen Konstruktor (Danke, der Name
viel mir einfach nicht ein) erst initialisieren muss in dem ich eine
Variable mit dem Konstruktor erzeuge.

Quote:
var monthNumber = {
jan: 1,
feb: 2,
mar: 3
...
};

schreiben können.
Das kannte ich nicht, aber Danke, ist perfekt für meine Zwecke.

Quote:
Diese will ich dann später wieder abfragen. über monthNumber.jan ist
dies auch kein Problem, aber geht es das ich dies auch über eine
Variable abfragen kann anstatt direkt? Also monthNumer.flexVar (gibt
dann nach Inhalt von flexVar den entsprechenden Wert zurück). Mir war
klar dass das nicht so funktioniert, hab aber schon einige Kombinationen
durch, aber keine Lösung gefunden.

Möglicherweise suchst Du

monthNumber["jan"]

Das schreit jedoch stattdessen geradezu nach einem Date-Objekt.
Ein Date Objekt hilft mir insofern wenig, weil die Variable beim Seiten
aufruf mit übergeben wird, und ich eben andeer Zahlen brauche um den
ersten Tag im Monat zu berechen (ob Dienstag etc.) (Bitte sag jetzt
nicht dass das mit eine Date-Objekt geht...)

Quote:
Die zweite betrifft IE. Ich will den selektierten Text in einem Textarea
mit Tags umgeben, dies mache ich bis jetzt über diese Funktion:
[...]
Die Eigenschaften selectionStart und End kennt aber der IE nicht (ich
arbeite mit Linux und Seamonkey). Gibt's da eine Zwischenlösung (ohne
Browserweiche?)

Ja:

if (typeof o.selectionStart != "undefined"
&& typeof o.selectionEnd != "undefined)
{
...
}
else
{
// Ansatz für MSHTML-DOM
}

Details siehe u.a. http://www.faqts.com/knowledge_base/...html/aid/13562

Das nächste Mal bitte zuerst eine Suchmaschine Deiner Wahl benutzen.
Hatte ich versucht, aber ohne das Schlüsselwort Konstruktor kam ich
nicht weit.

Ich Danke dir.
Quote:
PointedEars
Rob


Reply With Quote
  #4  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Eigene Funktionen und IE Kompatibilität - 11-09-2007 , 04:06 AM



Robert Zenz wrote:
Quote:
Thomas 'PointedEars' Lahn schrieb:
Robert Zenz wrote:
Ich hab eine eigene Funktion erstellt da ich eine Zeichenfolge in einen
Wert vergleichen.

function monthNumber() {
Das ist ein Konstruktor, der Bezeichner sollte folglich mit einem
Grossbuchstaben beginnen.

this.jan = 1;
this.feb = 4;
this.mar = 3;
...
}
monthNumber = new monthNumber();
So überschreibst Du den zuvor deklarierten Kontruktor gleich wieder.
OOP-technisch ist das Unsinn, denn dann hättest Du auch gleich
Ich hatte das so verstanden es ich einen Konstruktor (Danke, der Name
viel mir einfach nicht ein) erst initialisieren muss in dem ich eine
Variable mit dem Konstruktor erzeuge.
Nein, sobald Du eine Funktion deklarierst, kannst Du sie theoretisch als
Konstruktor (für ein Objekt) verwenden. Da Funktionen in JS/ES Objekte
erster Klasse sind (was die Sprachen mit funktionalen Sprachen gemeinsam
haben), sind global deklarierte Funktionen Eigenschaften des vordefinierten
Globalen Objekts und deren Bezeichner können wie Variablen verwendet werden.

Im vorliegenden Fall wird zuerst ein Function-Objekt erstellt und die
globale Eigenschaft `monthNumber' ist eine Referenz dafür. Mit der zweiten
Anweisung rufst Du zwar jenes Function-Objekt als Konstruktor auf (abstrakte
Methode `[[Construct]]'), aber nachdem Du ein neues monthNumber-Objekt
erstellt hast (d.h. ein Objekt, dessen Konstruktor `monthNumber' war),
überschreibst Du die Referenz wieder mit der Referenz zu diesem neuen
Objekt. Damit kann das nun nicht mehr referenzierte Function-Objekt später
per automatischer Garbage Collection markiert und gelöscht und der
alloziierte Speicher wieder freigegeben werden.

Details siehe Edition 3 Final der ECMAScript-Spezifikation.

Quote:
var monthNumber = {
jan: 1,
feb: 2,
mar: 3
...
};

schreiben können.
Das kannte ich nicht, aber Danke, ist perfekt für meine Zwecke.
Gern geschehen Semantisch gesehen ist das übrigens dasselbe wie

var monthNumber = new Object();
monthNumber.jan = 1;
...

Obige Syntax (Object-Literal) wird seit JavaScript 1.3 (NN 4.06),
JScript 3.0 (IE 4.0) und ECMAScript Ed. 3 unterstützt. Siehe
http://PointedEars.de/scripts/es-matrix

Quote:
Diese will ich dann später wieder abfragen. über monthNumber.jan ist
dies auch kein Problem, aber geht es das ich dies auch über eine
Variable abfragen kann anstatt direkt? Also monthNumer.flexVar (gibt
dann nach Inhalt von flexVar den entsprechenden Wert zurück). Mir war
klar dass das nicht so funktioniert, hab aber schon einige Kombinationen
durch, aber keine Lösung gefunden.
Möglicherweise suchst Du

monthNumber["jan"]

Das schreit jedoch stattdessen geradezu nach einem Date-Objekt.

Ein Date Objekt hilft mir insofern wenig, weil die Variable beim Seiten
aufruf
JFTR: Es gibt keine Webseiten, und aufgerufen werden Dokumente auch nicht.

Quote:
mit übergeben wird,
Welche Variable? Welcher Wert?

Quote:
und ich eben andeer Zahlen brauche um den ersten Tag im Monat zu berechen
(ob Dienstag etc.) (Bitte sag jetzt nicht dass das mit eine Date-Objekt
geht...)
Das folgende Script liefert den Wochentag des ersten Tags des aktuellen
Monats (vorausgesetzt, die lokale Systemzeit stimmt; man kann jedoch das
clientseitige mit serverseitigem Script verbinden) im Bereich von 0=Sonntag
bis 6=Samstag:

var d = new Date();
window.alert(new Date(d.getFullYear(), d.getMonth(), 1).getDay());

Das Ergebnis in diesem Monat sollte `4' sein -- 2007-11-01 war ein Donnerstag.

Sorry ;-)


PointedEars

P.S.
Bitte nur das Notwendigste zitieren (also z.B. normalerweise keine
Unterschriften) und zwischen Zitat und eigenem eine Leerzeile lassen.
Das verbessert die Lesbarkeit.
--
Prototype.js was written by people who don't know javascript for people
who don't know javascript. People who don't know javascript are not
the best source of advice on designing systems that use javascript.
-- Richard Cornford, cljs, <f806at$ail$1$8300dec7 (AT) news (DOT) demon.co.uk>


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.