Я не знаю, почему это не сработает.Я не могу понять, как вызывается функция или что ей передается.
Я думаю, что я бы по-другому сделал бы создание .clone()
независимо от того, являетесь ли вы "очистка "входов.Тогда вы не оборачиваете и не разворачиваете элемент, который находится в DOM.Просто используйте оператор if()
, чтобы решить, очищать его или нет.
Примерно так:
function getHTML($obj, clean) {
var $clone = $obj.clone();
if (clean) {
$clone.find('input').each(function() { this.value = ''; });
}
return $clone.wrap('<div></div>').parent()[0].innerHTML;
}
Или чуть больше jQuery и меньше кода:
function getHTML($obj) {
return $obj.clone().find('input').val('').end().wrap('<div/>').parent().html();
}
Немного менее эффективно, но если он запускается только один раз при загрузке страницы, то, возможно, это не проблема.
Или, если он все равно будет превращен в объект jQuery, почему бы просто не вернутьчто?
function getHTML($obj) {
return $obj.clone().find('input').val('').end();
}
Теперь вы вернули очищенный клон оригинала, который готов к вставке в любое время.
РЕДАКТИРОВАТЬ:
Не могу понять, почему мы не можем получить новую строку.
Вот функция, которая будет возвращать элементы DOM.Кроме того, я в тупике!
function getHTML($obj, clean) {
var $clone = $obj.clone();
if (clean) {
$clone.find('input').each(function() {
this.value = '';
});
}
return $clone.get(); // Return Array of DOM Elements
}
РЕДАКТИРОВАТЬ: Работает сейчас.
Я отбросил большую часть jQuery и использовал .setAttribute("value","")
вместо this.value
.
Попробуйте:
function getHTML($obj, clean) {
var clone = $obj[0].cloneNode(true);
var inputs = clone.getElementsByTagName('input');
console.log(inputs);
for(var i = 0, len = inputs.length; i < len; i++) {
inputs[i].setAttribute('value','');
}
return $('<div></div>').append(clone)[0].innerHTML;
}