2015-01-24 2 views
0

Предположим, Я это,Попадая тэгами без других элементов в зависимости от DOM в JavaScript

var sampleString = "<username>user1</username><password>userpassword</password><age>21</age><sex>male</sex>"; 

Я пропусканием через DOM парсер, чтобы заполнить данные в HTML форме. Я использую это как ссылку. http://xmljs.sourceforge.net/website/sampleApplications-w3cdom.html

Но в этом DOM парсер

docRef.txtFirstName.value = trim(user.getElementsByTagName("FIRSTNAME").item(0).getFirstChild().getNodeValue(),true, true); 

Edit: Это преобразуется в DOM перед обращением код выше. Он заполняет данные в форме html, получая значения по отношению к tagNames один за другим, но мне нужен статический метод, который можно использовать для заполнения различных форм, таких как получение обоих имен тегов и значений один за другим.

Они получают элементы по имени tagName и заполняют форму соответствующими идентификаторами. Но у меня много форм в моем приложении. Я думаю, что это не будет хорошим выбором для редактирования вышеуказанного кода для каждой формы. Я искал в Интернете getTagnames, но все они относятся к получению имен тегов из элемента и так далее. Я не могу найти ничего связанного с получением Tagnames из var в javascript. Можно ли получить tagName из var (конечно, это DOM в конечном процессе)?

+1

Нет. Вам нужно разобрать строковое значение и превратить его в DOM, чтобы извлечь из структуры имена тегов. – Pointy

+0

@Pointy Actully Я разбираю эту строку и, прежде чем разделять значения tagNamesm, это DOM. Я спрашиваю, он заполняет данные в форме html, получая значения по отношению к tagNames один за другим, но мне нужен статический метод, который можно использовать для заполнения всех форм. –

ответ

1

Вы можете просто использовать примитивную функцию jQuery, а затем проанализировать ее. Функция jQuery принимает хорошо сформированную строку html и возвращает объект jQuery, который имеет filter.

Аргумент, переданный filter, может быть css-селектором.

var sampleString = "<username>user1</username><password>userpassword</password><age>21</age><sex>male</sex>"; 
$(sampleString).filter('username').text(); // user1 

Есть много способов пересекающих в DOM в JQuery как closest, find, parent, filter, и многое другое .. Просто применять то, что вам нужно.

+0

Правильно, но, конечно, '$ (somestring)' - это еще один способ создания DOM. – Pointy

+0

... и на самом деле в этом случае я не уверен, что это сработает; эта строка не имеет одного внешнего элемента контейнера. * edit * no Я был неправ, это работает :) – Pointy

+0

@Pointy yup it does :) Это просто делает DOM того, что дано, * временно *, поэтому он вроде работает. –

1

Я бы не использовал $.parseHTML(sampleString) или $(sampleString) для анализа данных, которые недопустимы html. Результат может быть неопределенным с будущими выпусками html.

Вместо этого я хотел бы убедиться, что ваш sampleString является действительной структурой XML (имеющий только один элемент в корне):

var sampleString = "<info><username>user1</username><password>userpassword</password><age>21</age><sex>male</sex></info>"; 

и разобрать его с помощью jQuery.parseXML(). Вы можете использовать обычный JQuery DOM-Traversing для этого результата.

var doc = $(jQuery.parseXML(sampleString)); 
doc.find('username').text(); 

Чтобы проиллюстрировать проблему тегом html, который является новым для html5. Предположим, вы хотели бы добавить источник информации к своим данным, вы можете использовать <source> в качестве тега.

var sampleString = '<username>user1</username><password>userpassword</password><age>21</age><sex>male</sex><source>form somewhere</source>'; 

Если вы будете использовать $.parseHTML(sampleString) или $(sampleString) это приведет:

[<username>user1</username>, <password>userpassword</password>, <age>21</age><sex>male</sex>, <source>, "from somewhere"]

Как вы можете видеть "from somewhere" не является частью <source> больше.