Hallo,
swap : function(item1, item2) {
var parent = item1.parentNode;parent.removeChild(item1);
parent.insertBefore(item1, item2);
}item1 und item2 sind einfach 2 li-Objekt.
Das Problem ist, dass ich neuerdings Iframes(editable) in die Liste eingefügt habe. Nun modifiziert der Benutzer den Inhalt der Iframes und wenn er dann per Drag&Drop die Sortierung verändert, verschwindet der Inhalt des Iframes. Alles andere bleibt mit value ect. bestehen.
Grund dafür ist wohl, dass er wohl nur die iframe-Tags mitkopiert, jedoch nicht den Verweis auf die temporäre HTML-Datei.
Ja, so ähnlich. [Node.insertBefore() fügt Core-DOM-Nodes in das Dokument ein. Es berücksichtigt dabei zwar DocumentFragments, allerdings nur, indem es die childNodes mit berücksichtigt. chilNode Deines LI-Elements ist das HTMLIFrameElement, allerdings nicht dessen contentDocument und dessen childNodes.
Meine Versuche, den innerHTML des Iframes im Nachinein wieder zu setzen, sind leider fehlgeschlagen.
Ist das Dokument eines Frames dessen innerHTML? Nein, oder? Sonst müsste ja
<iframe>
<h1>Test</h1>
<p>Test</p>
</iframe>
Eine Überschrift und einen Textabsatz im IFrame anzeigen.
Du könntest versuchen, das contentDocument des IFrames anzusprechen. Das ist dann ein Document Objekt. Und dann dessen body-Node via myIFrame.contentDocument.body. Das sollte dann innerHTML haben.
Beispiel:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Titel</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript">
<!--
function handleIFrame() {
var myIFrame = document.body.firstChild;
//haben wir den IFRAME?
alert (myIFrame.tagName);
if (myIFrame.tagName == "IFRAME") {
//hat der IFRAME childNodes?
alert (myIFrame.childNodes.length);
//hat der IFRAME innerHTML?
alert (myIFrame.innerHTML);
//holen des IFrame Documents und des innerHTML aus dessen Body
if (myIFrame.contentDocument) { //DOM HTMLIFrameElement.contentDocument für DOM-Styndardkonforme Browser
var myIFrameDocument = myIFrame.contentDocument;
alert (myIFrameDocument.body.innerHTML);
} else if (myIFrame.contentWindow) { //Frame.contentWindow.document für den IE
var myIFrameDocument = myIFrame.contentWindow.document;
alert (myIFrameDocument.body.innerHTML);
}
}
}
//-->
</script>
</head>
<body><iframe src="Datentabelle.html" onload="handleIFrame();">
</iframe>
</body>
</html>
viele Grüße
Axel