execCommand(createLink) selbst bauen
69erIVAN
- javascript
Grüß euch!
Ich versuche gerade für einen wysiwyg-editor das execCommand(createlink) nach zu bauen, weil es für mich zu wenig funktionen hat (man kann kein target angeben) -> natürlich stell ich es frei. jetzt hab ich mir mein eigenes popup gebaut mit dem ich auch schon den markierten text als link erstellen kann. jetzt hab ich folgendes problem wenn ich jetzt einen link erstellt habe und ich möchte ihn ändern sollte das so funktionieren das ich den cursor in den gewünschen link im editor setze und dann auf den button link klicke und dort die daten des links stehen (im popup) damit man ihn editieren kann. meine frage wie bekomme ich die daten des links wie greif ich drauf zu?? kann mir vielleicht jemand helfen?
document.???.tags[a].href??? oder keine ahnung?
ich hoffe ich habe meine problematik halbwegs verständlich dargestellt
big thx for help!
greetz ivan
weil den sourcecode von dem fertigen popup das einen link erstellt mit dem execCommand gibts ja nicht oder?? ach ja das ding sollte übrigens überall laufen wenns geht ...
greetz ivan
Hi,
du könntest mal probieren, das Ding mit einer ID zu versehen, dann ein document.getElementById zu machen. Dann hast du hoffentlich das gesamte A-Node.
Dies hat dann wahrscheinlich ein Attribut href, dass du mit getAttribute("HREF") bekommen solltest (analog mit getAttribute("TARGET") und so...
Ist ein Versuch wert, hab's allerdings noch nicht selbst ausprobiert.
PS: Wie bekommst du eigentlich (wenn du sagst, du möchtest das für so viele Browser wie möglich machen), die Sachen wie editMode="on" bzw. die ganzen createRange-Befehle hin? Funktionieren die auch auf anderen Browsern??
MfG
Rouven
PS: Wie bekommst du eigentlich (wenn du sagst, du möchtest das für so viele Browser wie möglich machen), die Sachen wie editMode="on" bzw. die ganzen createRange-Befehle hin? Funktionieren die auch auf anderen Browsern??
Ups, das Ding heißt natürlich designMode oder contentEditable...
MfG
Rouven
also ehrlich gesagt kenn ich mich noch nicht so gut mit javascript aus ... der editor ist von interactivetools.com htmlarea ... ich hab mich in den letzten 4 tagen intensiv damit beschäftigt und habs jetzt eben so weit zusammen gebracht das ich einen link erstelle! aber hier hast du mal nen ausschnitt mit dem source ... dens übrigens frei zum download gibt - sehr cool das ding!! läuft übrigens unter "IE 5.5+ (Windows)/Mozilla 1.3 (all OS) cross platform functionality" laut it ... jetzt möcht ich halt schauen das meine erweiterung auch überall läuft weil ich sie ja auch zur verfügung stellen will ... wer nimmt soll ja auch geben nicht?
das createRange und select range hat er einer eigenen funktion übergeben wo er das abarbeitet:
// returns the current selection object
HTMLArea.prototype._getSelection = function() {
if (HTMLArea.is_ie) {
return this._doc.selection;
} else {
return this._iframe.contentWindow.getSelection();
}
};
// returns a range for the current selection
HTMLArea.prototype._createRange = function(sel) {
if (HTMLArea.is_ie) {
return sel.createRange();
} else {
this.focusEditor();
if (typeof sel != "undefined") {
return sel.getRangeAt(0);
} else {
return this._doc.createRange();
}
}
};
********************************************************************
das ist die link funktion dazu:
HTMLArea.prototype._insertLink = function() {
var sel = this._getSelection();
var range = this._createRange(sel);
var editor = this; // for nested functions
this._popupDialog("insert_link.html", function(param) {
if (!param) { // user must have pressed Cancel
return false;
}
var doc = editor._doc;
var IT = range.text;
alert(inner);
// erstellt das linkelement
var lin = doc.createElement("a");
// assign the given arguments
for (var field in param) {
var value = param[field];
if (!value) {
continue;
}
switch (field) {
case "href" : lin.href = value; break;
case "target" : lin.target = value; break;
}
}
doc.appendChild(lin);
lin.innerText = IT;
if (HTMLArea.is_ie) {
range.pasteHTML(lin.outerHTML);
} else {
// insert the table
editor.insertNodeAtSelection(lin);
}
return true;
}, null);
};
aber ich glaub besser is wenn du dir das ding saugst ;) zwegs übersicht - ich werd das jetzt mal ausprobieren was du da geschrieben hast wird etwas länger dauern weil ich ja noch nicht so der guru bin hehe / Thx auf jeden fall als anfänger in js hatte ich jetzt echt keine idee mehr, aber dein ansatz klingt gut ... bin halt php-programmierer nicht so OOP.
ich hoffe ich darf mich wieder melden wenn ich hänge bzw. mein source *gg*!
schönen tag noch
ivan