ToBiOh: Tag löschen - aber nicht Inhalt

Hallo JSler,
habe bereits länger nach einer Methode gesucht, um mit JS einen Tag zu löschen, aber nicht den Inhalt des Tags.

Ziel:
Innerhalb verschiedener unbennanten Elementen habe ich ein bestimmtes Element (hier) z.B. <blockquote>..</blockquote> nun möchte ich einfach das Element Blockquote entfernen - der Inhalt von Blockquote soll aber an gleicher Stelle erhalten bleiben.

Lösungsansätze von meiner Seite:
Wie folgt habe ich Blockquote durch ein einfaches leeres Span ersetzt. Das ist zwar nicht was wirklich was mein Ziel war funktioniert aber auch.

  
elementselectedcont = (z.B. das Blockquote);  
selectedorigintext = document.createElement('span');  
elementselectedcont.parentNode.insertBefore(selectedorigintext, elementselectedcont);  
selectedorigintext.innerHTML = elementselectedcont.innerHTML;  
elementselectedcont.parentNode.removeChild(elementselectedcont);	

Problem(e):
Man kann kein HTML vor einem Element einfügen. (?) Nur ein anderen Element (wie oben mit insertBefore).

vielleicht weiß ja jemand von Euch Rat?

grüße Tobias

    1. Theoretisch ja aber ist leider nicht Cross-Browser kompatibel :(
      Trotzdem vielen Dank!

  1. Hallo,

    anscheinend kennst du nur Elementknoten, aber keine Textknoten. Der Text im blockquote-Element ist aus DOM-Sicht einfach ein Knoten, den du genauso aus- und einhängen kannst, wie du es mit Elementen tust.
    Eine einfache Lösung wäre: Du durchläufst mit einer Schleife alle Kindknoten (childNodes) von blockquote, hängst jedes aus (removeChild) und hängst es vor dem blockquote wieder ein (insertBefore). Schließlich löscht du den (dann leeren) blockquote-Elementknoten (removeChild).

    Mathias

    1. Stimmt danke! Hatte an diese Möglichkeit nicht gedacht, da ich vorher einmal  das Problem hatte, dass ich ein Element brauchte das selektiert werden sollte und man kann ja nicht jedes Element einzeln selektieren lassen sondern braucht da dann ein Element und um alle Unterelemente eines Elements zu einem Element zusammenzufassen gibt es ja bisher keine Cross-Browser kompatible Lösung...

      Naja soviel dazu. Hier wie ich das Problem jetzt gelöst habe:

        
      		elementselectedcont = wordxb.getContaining();  
      		elementselectedar = elementselectedcont.childNodes;  
      		elementselectedcont.id = 'wxdeletelement';  
      		for (elementnum = 0; elementnum < elementselectedar.length; elementnum++) {  
      			elementnum2 = 0;  
      			while (elementselectedar[elementnum] != null) {  
      			elementselectedcont.parentNode.insertBefore(elementselectedar[elementnum], elementselectedcont);  
      			if (typeof(elementselectedar[elementnum]) != 'undefined') {  
      			elementselectedar[elementnum] = elementselectedar[elementnum][elementnum2];  
      			}  
      			}  
      		}
      

      Vielen Dank für deine Hilfe! :)

    2. Hi,

      Eine einfache Lösung wäre: Du durchläufst mit einer Schleife alle Kindknoten (childNodes) von blockquote, hängst jedes aus (removeChild) und hängst es vor dem blockquote wieder ein (insertBefore).

      Das "aushängen" ist überflüssig - du kannst mittels insertBefore/appendChild einen Knoten auch direkt "umhängen".

      MfG ChrisB

      --
      Light travels faster than sound - that's why most people appear bright until you hear them speak.