Использование jQuery для установки значений в строке XML - PullRequest
2 голосов
/ 30 марта 2012

Я получаю следующую XML-подобную строку с помощью $ .ajax () get. Поскольку это недопустимо, я не могу использовать dataType: 'xml' или анализировать с $ .parseXML (). Использование xml в качестве строки и использование jQuery для обхода, похоже, работает нормально. Я могу использовать метод find () для чтения атрибутов, но не могу установить значение. (Я могу получить только XML, он предоставляется другим отделом, и я не могу его изменить.)

TLDR: необходимо манипулировать строкой xml. Добавьте значения пользователя, пароля и типа, чтобы они могли быть отправлены обратно на сервер.

var xml = '<attrs xmlns="http://www.blah.com/abc/wxyz"><attr name="user" type="string"/><attr name="password" type="string"/><attr name="type" type="string" possibilities="typeOne,typeTwo,typeThree,typeFour">typeOne</attr></attrs>';

/*
<attrs xmlns="http://www.blah.com/abc/wxyz">
  <attr name="user" type="string"/>
  <attr name="password" type="string"/>
  <attr name="type" type="string" possibilities="typeOne,typeTwo,typeThree,typeFour">typeOne</attr>
</attrs>
*/

// The following works fine. I get the possibilites, split them, and add them to a form:
$.each( $(xml).find('attr[possibilities]').attr('possibilities').split(','), function(index,value){
  options += '<option value="'+value+'">'+value+'</option>';
});

// I have tried the text(), prop(), and attr() methods. From what I've read you are supposed to use prop() instead of attr for setting values, but I tried attr anyway.
$(xml).find('attr[name=user]').attr( 'textContent', 'TEST' );
$(xml).find('attr[name=user]').text( 'TEST' );  
$(xml).find('attr[name=user]').prop( 'textContent', 'TEST' );

// After attempting attr, text, and prop, the textContent property shows nothing (not undefined):
console.log( 'textContent ' + $(xml).find('attr[name=user]').prop('textContent') );

Я относительно новичок в этом, так что, возможно, мой селектор просто не прав. Любая помощь приветствуется. Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 30 марта 2012

Каждый раз, когда вы вызываете $ (xml), вы создаете новый объект dom на основе исходной строки.

Попробуйте вместо этого:

 j = $(xml);
 j.find('attr').attr('foo', 'bar');
 console.log(j.html());

теперь вы анализируете строку xml только один раз и обновляете получившийся узел.

0 голосов
/ 30 марта 2012

Используйте $ .parseXML, чтобы позволить вам манипулировать XML с помощью jQuery

Пример:

var $xml=$($.parseXML( xml));
 /* create a new xml node*/
 var testAttr=$( '<attr name="test"></attr>');
  /* append node to xml*/
 $xml.find('attrs').append(testAttr);
 /* change an attribute in xml*/
 $xml.find('attr[name="user"]').attr('type', 'Dynamically changed');

Демонстрация: http://jsfiddle.net/Ut5Gg/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...