Краткое решение из пакета 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
.
Дайте загружаемому изображению класс, затем в обратном вызове 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'/>");
});
});
Создайте элемент и используйте его в качестве параметра для 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"/>');
});
});
Вы можете присвоить ему уникальный идентификатор, используя индекс:
$("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'/>");
});
Причина, по которой ваш код не работает, заключается в том, что первый replaceWith заменяет элемент, на который ссылается this . Второй replaceWith пытается заменить его снова, но, поскольку он уже удален, заменять нечего. И значок галочки не отображается.
Лучше всего использовать функцию обратного вызова post, которую предлагает tvanfosson.
Почему не создавать промежуточный объект 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
});