2010-11-25 3 views
2

Я пытаюсь удалить двойные кавычки из текстовых узлов. Следующий код работает:Правильный способ заменить текст в элементе E4X

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,''); 

Однако, я не чувствую себя комфортно о эле [item.localName()] = строительство. Действительно, у меня уже есть заостренный к тексту пункта, и было бы гораздо логичнее использовать что-то вроде:

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

К сожалению, этот код не делать то, что он должен делать. Любые идеи почему? Каков правильный способ сделать это?

ответ

1

Где у вас этот код? Потому что он отлично работает для меня в Firefox.

И вот это (попробуйте и дайте мне знать, если он работал для вас):

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

Я бегу код в YQL (Open Таблица данных элемент). Ваш код работает, но на самом деле мне было интересно, есть ли способ изменить текст в узле, не обращаясь к родительскому (это то, что я делаю сейчас, elem [item.localName()]) – mtelis 2010-11-26 06:08:37

+0

@mtelis Hmm .. `txt.nodeValue = ...` должен работать, но это не так. В любом случае, почему именно вы хотите избежать обращения к родительскому элементу? – Zecc 2010-11-26 10:50:38

1

Попробуйте, пожалуйста:

for each (var color in cars.*.*) 
    color.* = color.toString().replace(/"/g,''); 
Смежные вопросы