jQuery: замените исходные данные промежутками

Я пытаюсь заменить исходные данные промежутками, содержащими входные значения таким способом как, чтобы смочь переключить их назад после нажатия кнопки. Я полагаю, что это было бы наиболее легко сделано на двух этапах - добавление <span>[input value]</span> перед исходными данными и затем сокрытием исходных данных. Единственная проблема, я испытываю затруднения из-за первой части. Я пробую вещи как

$('#container').find('input')
    .parent()
    .prepend('<span></span>') // this effectively creates: <span></span><input value=____>

Однако в предварительно ожидать $ оператора (это), кажется, не определено, таким образом, я не могу сделать

    .prepend('<span>'+$(this).children('input').val()+'</span>')

С тех пор существует несколько исходных данных, я не могу просто поместить входное значение в переменную. Как я сделал бы это?

7
задан Mala 29 June 2010 в 17:19
поделиться

2 ответа

Для обновленного вопроса:

Вы можете сделать что-то вроде этого (основываясь на комментариях, редактирование для каждой строки):

$('input', context).each(function() {
  $("<span />", { text: this.value, "class":"view" }).insertAfter(this);
  $(this).hide();
});

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


Для исходного вопроса:

Вы захотите использовать .replaceWith () для этого:

$('#container').find('input').each(function() {
  $(this).replaceWith("<span>" + this.value + "</span>");
});

.each () создает закрытие, в котором this относится к элементу ввода, поэтому вы можете использовать, например, this.value .

Чтобы убедиться в правильности кодирования, немного расширите его, чтобы использовать .text () , например:

$('#container').find('input').each(function() {
  $(this).replaceWith($("<span />").text(this.value));
});​

Вы можете попробовать демо здесь

26
ответ дан 6 December 2019 в 06:35
поделиться

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

function spanify() {
  $('#container input')
    .attr("readonly", "readonly")
    .css("borderWidth", "0");
}

function despanify() {
  $('#container input')
    .removeAttr("readonly")
    .css("borderWidth", "auto");
}

Возможно ли это?

1
ответ дан 6 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

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