Замена элемента и возврат нового в jQuery

Краткое решение из пакета formula.tools как функция as.character.formula:

frm <- celkem ~ rok + mesic
Reduce(paste, deparse(frm))
# [1] "celkem ~ rok + mesic"

library(formula.tools)
as.character(frm)
# [1] "celkem ~ rok + mesic"

Reduce может быть полезно в случае длинных формул:

frm <- formula(paste("y ~ ", paste0("x", 1:12, collapse = " + ")))

deparse(frm)
# [1] "y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + "
# [2] "    x12"                                                      
Reduce(paste, deparse(frm))
# [1] "y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 +      x12"

Что из-за width.cutoff = 60L в ?deparse.

24
задан Philip Morton 21 May 2009 в 13:19
поделиться

5 ответов

Дайте загружаемому изображению класс, затем в обратном вызове post используйте этот класс в качестве селектора, чтобы найти изображение, которое вы только что внедрили.

$("input[type='checkbox']").click(function() {
  $(this).replaceWith("<img src='loading.jpg' alt='loading' class='loading-image' />");
  $.post("somepage.php", function() {
      $('.loading-image').replaceWith("<img src='tick.jpg' alt='done'/>");
  });
});

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

EDIT : еще одна альтернатива, которая использует переменную для хранения нового элемента и устраняет необходимость применять класс и искать новый элемент при возврате функции.

$("input[type='checkbox']").click(function() {
  var loading = $("<img src='loading.jpg' alt='loading' />");
  $(this).replaceWith(loading);
  $.post("somepage.php", function() {
      loading.replaceWith("<img src='tick.jpg' alt='done'/>");
  });
});
22
ответ дан 28 November 2019 в 23:49
поделиться

Создайте элемент и используйте его в качестве параметра для replaceWith:


$('input[type=checkbox]').click(function() {
    var img = document.createElement('img');
    img.src = 'loading.jpg';
    $(this).replaceWith(img);
    $.post('somepage.php', function() {
        $(img).replaceWith('<img src="tick.jpg" alt="done"/>');
    });
});

13
ответ дан 28 November 2019 в 23:49
поделиться

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

$("input[type='checkbox']").click(function() {
  var index = $("input[type='checkbox']").index(this);
  $(this).replaceWith("<img src='loading.jpg' id='myLoadingImage" + index + "' alt='loading'/>");
  $.post("somepage.php");
  $('#myLoadingImage'+index).replaceWith("<img src='tick.jpg' alt='done'/>"); 

});
2
ответ дан 28 November 2019 в 23:49
поделиться

Причина, по которой ваш код не работает, заключается в том, что первый replaceWith заменяет элемент, на который ссылается this . Второй replaceWith пытается заменить его снова, но, поскольку он уже удален, заменять нечего. И значок галочки не отображается.

Лучше всего использовать функцию обратного вызова post, которую предлагает tvanfosson.

0
ответ дан 28 November 2019 в 23:49
поделиться

Почему не создавать промежуточный объект jquery, как этот? ...

$("input[type='checkbox']").click(function() {
    var insertedElement = $("<img src='loading.jpg' alt='loading'/>");
    $(this).replaceWith(insertedElement);
    $.post("somepage.php");
    var anotherInsertedElement = $("<img src='tick.jpg' alt='done'/>");
    $(this).replaceWith(anotherInsertedElement);
    //do something with either of the inserted elements
});
-1
ответ дан 28 November 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: