2010-11-22 3 views
2

У меня проблема с установкой узла cdata с jquery. Получение cdata легко выполняется с помощью функции .text(), но если я использую .text ('jquery> handy'), он не создает узел cdata.jquery set xml cdata

Это мой procecure: я получаю данные формы в XML, чтобы загрузить в виде что-то вроде этого:

<formdata> 
    <field id="title"><![CDATA[Some title]]></field> 
    <field id="description"><![CDATA[Some description]]></field> 
</formdata> 

я использую CDATA узлы, потому что поле может содержать все виды специальных символов. Затем я загружаю данные в форму, получая содержимое узла с помощью .text()

Если пользователь отправляет форму, я обновляю xml и конвертирую его в sting, чтобы отправить его на сервер. Я знаю, что могу просто разместить поля, но у меня есть веские причины, чтобы поместить его в XML-документ. Все работает очень хорошо, но нет, если пользователь делает ввод со специальными символами. Это, как я установить значение узла (в этом примере «descriptioon узел»)

domdoc.find('field[id="description"]').text($("#description").val()); 

Таким образом, узел используется, чтобы быть CDATA, но функция .text() удаляет это. Я ALO попытался это:

domdoc.find('field[id="description"]').text('<![CDATA[' + $("#description").val() + ']]>'); 

Это также не работает, поскольку .text() изменяет < к & GT;

У кого-нибудь есть решение? Мое вдохновение ушло .....

Спасибо, Simon

ответ

0

Просто установите текст, без добавления <![CDATA[. CDATA - это всего лишь один из способов избежать текста в XML, но поскольку jQuery ускользает для вас, вам не нужно использовать другой метод. &lt; не хуже <![CDATA[<]]>. Для приложений XML они идентичны.

+0

С уважением, porneL, Я попытаюсь разобраться в этом. – simon 2010-11-22 15:37:34

3

Простое решение. Создайте узел раздела CData и добавьте его в свой XML. Я изо всех сил старался работать с JQuery .text(). Это сработало фантастично.

  var cDataSection = self.xmlDocument.createCDATASection(text); 
      $(element).empty(); 
      $(element).append(cDataSection);