Объединение jQuery.load () и ajax dataFilter () - PullRequest
1 голос
/ 01 марта 2011

Я использовал jQuery.load () для загрузки содержимого html-страницы в лайтбокс. Наиболее полезная вещь, которую загрузка делает в этом случае, превращает полные HTML-страницы в чистый HTML-фрагмент для вставки в страницу.

Но (из-за ошибочного стороннего API, который не работает при динамической загрузке), мне нужно сначала использовать регулярное выражение для фильтрации одного или двух элементов со страницы, прежде чем он будет обработан как HTML, что означает, что мне нужно использовать параметр dataFilter $ .ajax.

Так что теперь, когда я использую $ .ajax вместо .load, мне нужно преобразовать отфильтрованный текст в чистый HTML, который .load доставляет автоматически

Но $ (response) генерирует странный ошибочный объект jQuery, в котором .find (), children () и т.д ... не работают.

Может кто-нибудь сказать мне, как получить чистый HTML, который мне нужен (я замечаю, что код Ajax injQuery сильно изменился с версии 1.4.4 до 1.5 - решение, использующее любую версию, подойдет)

Вот что у меня есть (с использованием jQuery 1.4.4) (все переменные и методы, на которые они ссылаются, определены выше этого кода)

 $.ajax({
            url: url,
            type: "GET",
            dataType: "html",
            dataFilter: function (response) {
                return response.replace(recaptchaRegex, "");
            },
            success: function (response) {
                // If successful, inject the HTML into all the matched elements
                // See if a selector was specified
                destination.html($(response).children("#lightBoxForm"));

                callback();
            }
        });

1 Ответ

1 голос
/ 29 марта 2011

Что ж, я вижу, об этом спрашивали некоторое время назад, но, надеюсь, это все равно будет полезно для вас.Из вашего вопроса я понимаю, что вы хотите скопировать функцию $ .load вместо функции $ .ajax.

Инструмент, который вам может пригодиться в будущем, - это jQuery viewer , так что вы можете точно видеть, как jQuery делает все под капотом.

    // Using jquery 1.5.1
    $(function () {

        var rscript = "/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi";

        // Will override all ajax requests on this page including load
        $.ajaxSetup({
            dataFilter: function (response) {
                return response.replace("Lorem ipsum.", "");
            },
            type: "GET",
            dataType: "html",
            // Disable caching of AJAX responses for example only
            cache: false
        });

        $("#load").click(function (evt) {
            evt.preventDefault();
            $('#content').load("html.htm #lightBoxForm");
        });

        $("#ajax").click(function (evt) {
            evt.preventDefault();

            $.ajax({
                url: "html.htm",
                success: function (res) {
                    $("#content").html("#lightBoxForm" ?
                            $("<div>").append(
                                        res.replace(rscript, ""))
                                           .find("#lightBoxForm") : res);
                }
            });

        });

    });

И мой HTML

   <input type="button" id="load" value="Load" />
   <input type="button" id="ajax" value="Ajax" />

   <div id="content"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...