2010-11-25 8 views
2

Ich versuche, doppelte Anführungszeichen von Textknoten zu entfernen. Der folgende Code funktioniert:Ordnungsgemäße Methode zum Ersetzen von Text im E4X-Element

var cars = <cars> 
      <buick> 
       <color> 
        "Blue" 
       </color> 
      </buick> 
      <chevy> 
       <color> 
        "Red" 
       </color> 
      </chevy> 
      </cars>; 

for each (elem in cars) 
    for each (item in elem.*) 
     elem[item.localName()] = item.text().toString().replace(/"/g,''); 

Aber ich fühle mich nicht wohl über Elem [item.localName()] = Konstruktion. Tatsächlich, ich habe bereits einen spitzen auf den Text ein und es wäre viel logischer, so etwas wie zu verwenden:

item = item.text().toString().replace(/"/g,''); 

Leider ist dieser Code scheint nicht zu tun, was es tun soll. Irgendwelche Ideen warum? Was ist der richtige Weg?

Antwort

1

Wohin führen Sie diesen Code? Weil es für mich in Firefox gut funktioniert.

Und so ist dies (versuchen Sie es und lassen Sie mich wissen, ob es für Sie gearbeitet):

for each (txt in cars..*.text()){ 
    txt.parent().setChildren(txt.toString().replace(/"/g,'')); 
} 
+0

ich den Code in YQL renne (Open Datentabelle Element). Ihr Code funktioniert, aber ich frage mich, ob es eine Möglichkeit gibt, Text in einem Knoten zu ändern, ohne auf das Elternelement verweisen zu müssen (das ist, was ich gerade mache, elem [item.localName()]) – mtelis

+0

@ mtelis Hmm .. 'txt.nodeValue = ...' sollte funktionieren, ist es aber nicht. Warum möchten Sie auf jeden Fall vermeiden, sich auf das Elternelement zu beziehen? – Zecc

+0

Es sollte beachtet werden, dass es tatsächlich mehrere verschiedene Textknoten unter demselben Element gibt, und Sie sollten wahrscheinlich 'normalize()' auf allen von ihnen aufrufen, nur um auf der sicheren Seite zu sein. Fall in Punkt: Ich habe gerade einen Kommentar in der Mitte des Textes hinzugefügt und mein Code ist kaputt, so dass es noch weniger robust als der ursprüngliche Code ist. – Zecc

1

die Sie interessieren, bitte:

for each (var color in cars.*.*) 
    color.* = color.toString().replace(/"/g,''); 
+1

Sie sollten Ihren Antworten eine Erklärung hinzufügen. Nicht nur Code. –