#jquery #html #filter #response
#jquery #HTML #Фильтр #ответ
Вопрос:
Я вызываю страницу, которая возвращает такие данные, как:
<div id="class">
<option>Value</option>
<option>Value</option>
</div>
<div id="type">
<option>Value</option>
<option>Value</option>
</div>
Я пытаюсь отфильтровать данные, чтобы я мог перебирать каждый из них и вставлять значения параметров в раскрывающийся список правильного раздела для них. Я даже расширил данные, чтобы я мог попробовать .find() на нем, и сделал его похожим:
<div id="class">
<div class="options">
<option>Value</option>
<option>Value</option>
</div>
</div>
<div id="type">
<div class="options">
<option>Value</option>
<option>Value</option>
</div>
</div>
Однако он по-прежнему не работает. Я получаю только текстовый вывод, а не элементы html. Итак, мой вопрос в том, как мне сохранить фактические элементы html при использовании .команда filter()? Мой текущий код приведен ниже.
$.ajax({
type: "POST",
url: "searchFunctions.php",
data: dataString,
success: function(data) {
// Create jquery object from the response html
var $response=$(data);
// Change styles for children
$response.filter('div').each(function(){
$("#" $(this).attr("id")).html($(this).find(".options"));
});
}
});
Пожалуйста, обратите внимание, я пробовал .text() и .html() в конце $(this).find(«.options»), но безуспешно. Он по-прежнему возвращал только часть значения. Но это странно. Когда я использовал $(this).html() (no .find(«.options.»)), я мог видеть теги, но все еще не теги…
Заранее спасибо.
Да, никогда даже не думал о том, что браузер удалит теги опций из-за отсутствия тега выбора…
Комментарии:
1. Как (почему?) Вы помещаете
<option>
теги внутри<div>
тегов?2. Я собираюсь предположить, что это может быть связано с тем, что a
div
не может содержатьсяoption
в допустимом HTML. Вы пробовали переносить параметры в a вместо a ?select
div
3. Потому что у меня есть несколько выпадающих списков, и мне нужен был способ различать, какие параметры были для какого выпадающего списка. Затем фильтр анализирует возвращенные данные по тегам div, и для каждого идентификатора основных тегов div он знает, с каким выпадающим списком связаны параметры. Теги div и теги опций — это единственное, что выводится на странице, которую вызывает jquery.
4. @nrabinowitz Да, использование тегов <select> вместо тегов <div> сработало, и использование .html() Спасибо. Напишите ответ, и я пометлю его как правильный.
Ответ №1:
Рассматривали ли вы возможность возврата строки JSON, а не html-кода в вашем ответе ajax? Это упростило бы синтаксический анализ, а объем данных, отправляемых с сервера, был бы меньше.
Ответ JSON будет выглядеть следующим образом:
'{"class":["option1", "option2"], "type": ["option1", "option2", "option3"]}'
Затем используйте метод parseJSON, чтобы перенести ваш ответ в объект. Рабочий пример см. в jsfiddle
Комментарии:
1. Нет, но я не слишком хорошо знаю JSON. Пришлось использовать его только один раз в приложении для телефона. Хотя мне нужно изучить его лучше, я бы предпочел пока держаться от него подальше. Тем не менее, я ценю эту идею.
2. Хорошо, я бы обязательно изучил это. Я обновил ссылку jsfiddle в своем сообщении, чтобы показать, как поместить параметры в поля выбора. Для получения дополнительной информации о JSON ознакомьтесь json.org , его довольно легко освоить!
Ответ №2:
Это связано с тем, что div
элемент не может содержать option
элемент в допустимом HTML. Это сработает, если вы обернете параметры в select
, а не в div
:
<select id="type">
<option>Value</option>
<option>Value</option>
</select>
Комментарии:
1. Еще раз спасибо. Даже не думал об этом, когда писал это.