69erIVAN: execCommand(createLink) selbst bauen

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

  1. 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

  2. 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

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. 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

      --

      -------------------
      ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
      1. 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