Как добавить еще один родственный элемент в e4x?

Если я хочу создать:

<foo>
  <bar>example1</bar>
  <bar>example2</bar>
</foo>

используя e4x, и у меня уже есть:

foo.bar = <bar>example1</bar>

Как добавить дополнительный тег бара?


person SCdF    schedule 20.09.2010    source источник
comment
Я только что отредактировал свой ответ: foo.bar должно быть неправильно. foo += ... вот что нам нужно. E4X спроектирован так, чтобы работать как обычные объекты JavaScript (особенно как литералы Object). Таким образом, на самом деле нет большой тайны, кроме отсутствия надлежащей документации (хотя сайт IBM может оказаться полезным).   -  person FK82    schedule 20.09.2010
comment
Да, мне нужно быстро нарастить скорость, думал, что я ТАК пингую об этом ;-) Фактическая спецификация ecma тоже не совсем дрянная, хотя да, документация немного скудна на земле.   -  person SCdF    schedule 20.09.2010
comment
Если вы говорите о белой книге: это хороший поиск, но им не хватает примеров. В любом случае, если вы придерживаетесь общего шаблона javascript с E4X, у вас все будет хорошо. Удачи!   -  person FK82    schedule 20.09.2010


Ответы (1)


Вы либо пишете другой литерал,

foo += <bar>example3</bar> ;

или вы используете соответствующие методы: http://www.ibm.com/developerworks/library/x-javascript4x.html (таблица 1),

var addition = <bar>example3</bar>
foo.insertChildAfter(foo.bar[1],addition) ;

ХТН

person FK82    schedule 20.09.2010
comment
Я тестировал rhino JS в JDK, и это должно быть foo.bar += ‹bar›example3‹/bar› ; Похоже, += добавляет братьев и сестер. - person Alex Pi; 03.02.2017
comment
Я считаю, что если у вас есть другие узлы, кроме бара внутри foo, += будет добавлен в конец, а не после бара. Таким образом, для ‹foo›‹bar/›‹baz/›‹/foo› insertChildAfter выполнит правильную работу, получив ‹foo›‹bar/›‹bar/›‹baz/›‹/foo› вместо ‹foo›‹bar /›‹баз/›‹бар/›‹/foo› - person Pablo Pazos; 15.11.2018