[JavaScript/Mozilla] Equivalent voor IE's "pasteHTML".

Pagina: 1
Acties:

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Hallo!

Na een paar eerdere topics hier gelezen te hebben en ook op google gezocht te hebben, kom ik er toch niet uit. Zelfs mijn "JavaScript bible" is niet duidelijk genoeg.

Ik wil - eigenlijk vrij simpel - in mijn IFrame met DesignMode = "On" een stukje HTML plakken in plaats van de geselecteerde tekst/html. In Internet Explorer lukt dat vrij makkelijk met pasteHTML, daar geen problemen.

In Mozilla ben ik inmiddels zover, dat ik wel de selectie kan achterhalen en bovendien deze selectie kan verwijderen. Maar ik weet niet hoe ik nu op de cursor positie m'n nieuwe HTML moet invoegen. Vanwege allerlei attributes in m'n html biedt execCommand geen oplossing.

Wat ik tot nu toe heb (voor wat betreft het Mozilla deel):

code:
1
2
3
4
<script>
var selection = document.getElementById('mytext').contentWindow.getSelection();
selection.deleteFromDocument();
</script>


Hoe nu verder? Ik snap niet goed hoe ik de selectie binnen een document verder kan bewerken met anchorNode, focusNode etc.

Alvast dank voor de hulp!

Verwijderd

Knip en plak uit de nextavenue core:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
NextAvenue.prototype.insertHTML = function(sHtml) {
  var n = nextavenue, s = nextavenue.getSelection();
  var r = nextavenue.getRange();
  n.getFrame().focus();

  if (n.browser.isIE) {
    if ((s.type + "").toLowerCase() == "control") {
      r(0).insertAdjacentHTML("beforeBegin", html);
      r(0).removeNode(true);
    } else {
      r.pasteHTML(sHtml);
    }
  } else if (n.browser.isGecko) {
    try {
      // Remove the current selection and insert all Childs 
      // of the created DIV element
      var o = document.createElement("div");
      o.innerHTML = sHtml;
      r.deleteContents();
      var i = 0;
      while (i < o.childNodes.length) {
        r.insertNode(o.childNodes[i++]);
      }
    } catch (e) {
    }
  }
};

Verwijderd

In Mozilla heb je de inserthtml commando, zie:
https://bugzilla.mozilla.org/show_bug.cgi?id=184509
en de testcase daar voor een voorbeeldje.

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

code:
1
2
3
var o = document.createElement("div");
    o.innerHTML = sHtml;
    // etc....


Dat is wel een misselijke truuk zeg! :P _o_

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Het is inmiddels gelukt. Bedankt voor alle hulp!

Verwijderd

Verwijderd schreef op 01 oktober 2004 @ 13:11:
In Mozilla heb je de inserthtml commando, zie:
https://bugzilla.mozilla.org/show_bug.cgi?id=184509
en de testcase daar voor een voorbeeldje.
Ik weet dat die functie bestaat, maar er was een reden waarom ik toch voor deze aanpak gekozen heb. Ik moet alleen wel bekennen dat me ontschoten is waarom ik inserthtml niet gebruik.

Clay: misselijke truuk? 't Werkt toch :P

Verwijderd

Een nadeel vind ik dat inserthtml niet de selectie 'bewaart'. De geinserte html zou eigenlijk geselecteerd moeten zijn, imho.
Pagina: 1