JQuery получить.я не могу заменить содержимое div в т.е. с динамически загруженным html - PullRequest
0 голосов
/ 09 ноября 2010

У меня проблема. просто попробуйте загрузить html в div ... все прекрасно работает в любом браузере, кроме ie.

    $('a[rel*=ajax]').click(function(e)
    {
        ajaxLink = $(this).attr('href')+"?ajax=true";
        theDiv = $(this).parents(".post");
        $.get(ajaxLink,function(data, textStatus){ $(theDiv).replaceWith(data); });
    });

если я пытаюсь предупредить (данные) в обратном вызове .get, я могу прочитать какой-нибудь html, но когда я пытаюсь «внедрить» его в Div, я получаю пустую страницу.

Заранее большое спасибо:)

Ответы [ 3 ]

0 голосов
/ 09 ноября 2010

можно попробовать вживую вместо клика и все должно работать нормально.

иногда в IE DOM может быть не готов

$(a[rel*=ajax).live('click', function() {

          });
0 голосов
/ 25 ноября 2010

к сожалению, не было закрыто .. и т. е. кажется, не очень гибок в решении подобных проблем.

0 голосов
/ 09 ноября 2010

... но когда я пытаюсь "внедрить" его в theDiv, я получаю пустую страницу.

Необходимо отменить действие по умолчанию для ссылки;в противном случае ссылка будет следовать.Либо добавьте return false в конец обработчика кликов, либо добавьте e.preventDefault(); к нему.Например, это:

$('a[rel*=ajax]').click(function(e)
{
    ajaxLink = $(this).attr('href')+"?ajax=true";
    theDiv = $(this).parents(".post");
    $.get(ajaxLink,function(data, textStatus){ $(theDiv).replaceWith(data); });
    return false; // This both prevents the default and stops bubbling
});

или

$('a[rel*=ajax]').click(function(e)
{
    ajaxLink = $(this).attr('href')+"?ajax=true";
    theDiv = $(this).parents(".post");
    $.get(ajaxLink,function(data, textStatus){ $(theDiv).replaceWith(data); });
    e.preventDefault(); // This just prevents the default, doesn't stop bubbling
});

Отдельно:

В цитируемом коде используются ajaxLink и theDiv переменные из родительской области (еслиони не объявлены нигде , они неявные глобальные переменные ).Может быть, вы меняете значение theDiv после запуска показанного кода, но до завершения вызова ajax?Это означало бы, что когда вызов ajax завершается, он использует новое значение theDiv, а не старое.

В любом случае, похоже, нет никаких причин, по которым код должен использовать переменные изродительскую область, я бы рекомендовал сделать их локальными для функции:

$('a[rel*=ajax]').click(function(e)
{
    var ajaxLink = $(this).attr('href')+"?ajax=true";
//  ^-- This is the new bit, the `var`
    var theDiv = $(this).parents(".post");
//  ^-- And this one
    $.get(ajaxLink,function(data, textStatus){ $(theDiv).replaceWith(data); });
});

В качестве отдельной проблемы вы уверены, что хотите replaceWith (который заменит родитель, который имеет класс post), а не html (который будет заменять только его содержимое)?

Нет также причин для вызова $ on *Снова 1042 *;parents уже возвращает объект jQuery.Итак:

$('a[rel*=ajax]').click(function(e)
{
    var ajaxLink = $(this).attr('href')+"?ajax=true";
    var theDiv = $(this).parents(".post");
    $.get(ajaxLink,function(data, textStatus){ theDiv.replaceWith(data); });
//                                             ^-- No need for $ here
});

И наконец: вы можете взглянуть на функцию load, которая загружает HTML с сервера и обновляет содержимое элемента с результатом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...