2009-07-06 7 views
4

chaning xml durch jquery Attribute ist kinderleicht, einfach:Schreiben von XML-Dateien mit jQuery

$(this).attr('name', 'hello'); 

aber wie kann ich einen anderen Tag in die Datei hinzufügen? Ich habe versucht, mit der Anlage die JS stirbt still.

Gibt es eine Möglichkeit, dies zu tun?

Erläuterungen: Dieser Code ist Teil einer Erweiterung von Firefox, also keine Sorge über das Speichern in das Benutzerdateisystem. Append funktioniert noch nicht für XML-Dokumente, aber ich kann XML-Attributwerte ändern

Antwort

10

Das Problem ist, dass jQuery den neuen Knoten im aktuellen Dokument der Webseite erstellt, so dass im Ergebnis der Knoten nicht an ein anderes XML-Dokument angehängt werden kann. Daher muss der Knoten im XML-Dokument erstellt werden.

Sie können dies tun, wie so

var xml = $('<?xml version="1.0"?><foo><bar></bar><bar></bar></foo>'); // Your xml 
var xmlCont = $('<xml>'); // You create a XML container 
xmlCont.append(xml); // You append your XML to the Container created in the main document 

// Now you can append without problems to you xml 
xmlCont.find('foo bar:first').append('<div />'); 

xmlCont.find('foo bar div'); // Test so you can see it works 
+1

Das funktioniert gut in FF & Chrome, aber IE mag es nicht sehr. Das Problem besteht darin, dass die erste XML-Zeichenfolge im ersten Ausdruck nicht analysiert werden kann. Auch wenn Sie das IE-spezifische Parsing verarbeiten, können Sie das XML-Dokument nicht in ein jQuery-Objekt einschließen, sodass Sie es wie oben gezeigt an den Knoten anhängen können. Die "html" -Methode funktioniert auch nicht, man muss "innerHTML" verwenden und ihm den Anfangs-XML-String als Wert geben. Der Versuch, Knoten im Knoten zu finden, funktioniert auch nicht. Sie müssen $ ("foo bar: first", xmlDoc) verwenden, um einen Kontext für jQuery bereitzustellen. – Raybiez

+1

@Raybiez ist korrekt über IE- aber ab jQuery 1.5 sollten Sie .parseXML (...) verwenden können, um dieses Problem zu beheben (nicht getestet): http://api.jquery.com/jQuery.parseXML / – Yarin

1

Ich würde vorschlagen, dass Sie den Code mit einem Debugger durchlaufen und sehen, ob Sie feststellen können, warum das Append einen Fehler verursacht (oder wenn der Fehler ist irgendwo anders). Etwas wie:

$('selector').append('<p></p>'); 

sollte gut funktionieren.

+1

kein Fehler vorhanden ist, aber die Funktion der Ausführung stoppt. – CamelCamelCamel

+0

Haben Sie die verwandten Manipulatoren wie prepend() und insertAfter() ausprobiert? – acrosman

+0

Ich kann bestätigen, dass dies leise stirbt – Yarin