Сохраняйте HTML при фильтрации ответа jquery от .ajax - PullRequest
0 голосов
/ 24 октября 2011

Я вызываю страницу, которая возвращает данные, такие как:

<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.)), Я мог видеть теги, но все же не теги ...

Заранее спасибо.

Да, даже не задумывался о том, что браузер будет отбрасывать теги параметров из-за отсутствия тега select ...

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Рассматривали ли вы возвращение строки JSON, а не HTML-кода в своем ответе ajax? Это упростит анализ, и объем данных, отправляемых с сервера, будет меньше.

Ответ JSON будет выглядеть так:

'{"class":["option1", "option2"], "type": ["option1", "option2", "option3"]}'

Затем используйте метод parseJSON, чтобы получить ваш ответ в объект. См. jsfiddle для рабочего примера

1 голос
/ 24 октября 2011

Это потому, что элемент div не может содержать элемент option в допустимом HTML.Это будет работать, если вы заключите опции в select вместо div:

<select id="type">
    <option>Value</option>
    <option>Value</option>
</select>
...