У меня есть HTML-страница, содержащая вопросы и ответы. Я хочу извлечь данные (вопросы/ответы) со страницы HTML и поместить их в объект JavaScript.Извлечь вложенные данные из HTML с помощью JavaScript
Это классовая структура в моей HTML страницы:
- вопрос-блок
- вопрос (только один вопрос на вопрос блока)
- ответ (несколько ответов можно на каждый вопрос)
Это мой HTML код со структурой:
<div class="question-block">
<h3>Question 1</h3>
<label class="question">Name</label>
<input type="text" class="answer" />
<div class="question-block" style="margin-left:20px;">
<h4>Question 1 a</h4>
<label class="question">What is your gender?</label>
<div class="radio">
<input type="radio" class="answer" name="gender" id="radio-male" value="male">
<label for="radio-male">Male</label>
</div>
<div class="radio">
<input type="radio" class="answer" name="gender" id="radio-female" value="female">
<label for="radio-female">Female</label>
</div>
</div>
</div>
<div class="question-block">
<h3>Question 2</h3>
<label class="question">Occupation</label>
<input type="text" class="answer" />
</div>
<br />
<button id="extract" type="button">Extract HTML data</button>
<pre id="extract-div"></pre>
Я хочу, чтобы создать структуру объекта в JavaScript, как это:
{
"questions": [
{
"question": "Name",
"answers": [
{
"answer": "Kristof"
}
]
},
{
"question": "What is your gender?",
"answers": [
{
"answer": "Male"
}
]
},
{
"question": "Occupation",
"answers": [
{
"answer": "Student"
}
]
}
]
}
Все работает, для вложенной "вопрос-блок" (1a, за исключением. Какого Вы пола?). Ответ на этот вопрос также добавляется к вопросу 1.
Как выбрать только ответы, которые находятся в текущем классе вопросов с JavaScript или JQlite (я использую угловой).
Должно быть возможным разбить классы «вопрос-блок» на несколько уровней. (А не только один уровень, как в примере)
Если вы хотите, чтобы проверить его или проверить свой код JavaScript, вот моя скрипка: https://jsfiddle.net/aywxte23/
Полностью повторить этот раунд, более долгосрочный подход к этому будет состоять в том, чтобы эта структура была определена в JavaScript, а затем использовала систему шаблонов для генерации HTML. Использование чего-то типа KnockoutJS или Angular позволило бы также динамическое обновление значений в JavaScript при их изменении в пользовательском интерфейсе. –
Если вы можете изменить значения атрибута 'name', вы можете использовать созданную мной библиотеку JavaScript под названием [Reaper] (https://github.com/gburghardt/reaper), которая захватывает все' input', 'textarea' и 'select' внутри данного элемента и создает объект JavaScript с использованием атрибутов имени поля формы в качестве руководства к именам свойств объектов и типам данных. –
@JamesThorpe Я использую AngularJS, и я подумал об этом, но они предоставили нам структуру выходных объектов после того, как я создал все. Для меня много рефакторинга, чтобы сопоставить эту структуру с моим пользовательским интерфейсом. И бюджет не всегда позволяет это :) – xtof