Столкновение дочернего XML-тега jQuery - PullRequest
1 голос
/ 10 сентября 2009

Я использовал jQuery .find () для обхода xml, и я обнаружил, что иногда у меня есть дочерний тег в дереве, который будет сталкиваться с тегом где-то дальше вверх по дереву. Например ...

<?xml version="1.0" encoding='UTF-8'?>
<userInfo>
   <firstname>This is a firstname</firstname>
   <lastname>This is a last name</lastname>
   <appSpecific>
      <location></location>
      <nickname>First L</nickname>
      <status></status>
      <color>FFB141</color>
      <lastName>Oops, second name</lastName>
      <firstName>Oops, second name</firstName>
      <gender></gender>
      <timezone></timezone>
      <active>true</active>
      <languages></languages>
      <homepage></homepage>      
   </appSpecific>
</userInfo>

Теперь, когда я сделаю это:

var firstname = $(xml).find("firstname").text();    
var lastname = $(xml).find("lastname").text();

Выводом является содержимое обоих наборов тегов.

Есть ли хороший способ отфильтровать дочерние теги (особенно если я знаю родительский тег, который хочу отфильтровать)?

Я пробовал какую-то комбинацию из .filter и .children, но не могу заставить ее работать. Любая помощь высоко ценится.

Спасибо, Джош

Ответы [ 2 ]

1 голос
/ 10 сентября 2009

Есть ли хороший способ отфильтровать дочерние теги (особенно если я знаю родительский тег, который я хочу отфильтровать)?

Используйте дочерний селектор CSS, чтобы сказать, что вам нужны только прямые потомки, а не все потомки.

Я не уверен, что такое "xml" в вашем примере. Если это XMLDocument, который вы получили, например. ответ AJAX, вы бы сказали:

var firstname = $(xml).find('userInfo>firstname').text();

С другой стороны, если это узел элемента XML для userInfo внутри такого документа, вы бы сказали:

var firstname = $(xml).find('>firstname').text();

Если это фактический текст строки документа выше, второй случай будет работать, но на самом деле он делает это неправильно. Использование $(markup) дает вам фрагменты HTML, а не XML. Ваш XML не является допустимым HTML и будет работать только по совпадению.

Нет встроенного способа создания / анализа XML-документа в jQuery. См. Например http://plugins.jquery.com/project/createXMLDocument о том, как вы можете это сделать, хотя поддержка браузера не идеальна.

1 голос
/ 10 сентября 2009

Вы можете попробовать использовать селектор :first:

var firstname = $(xml).find("firstname:first").text();    
var lastname = $(xml).find("lastname:first").text();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...