因此,我有一个包含隐藏项目的表。用户可以按下一个按钮,它将擦除所有表行。但是,我想保存隐藏的元素并将其附加到新表中。
我试图做到这一点:
T[] | null
我之所以var hidden_items = $("input[type='hidden']");
var html = "";
for ( var i = 0, l = hidden_items.length; i < l; i++ ) {
if (hidden_items[i].closest("tbody") !== null) {
html += hidden_items[i]
}
}
是因为整个页面上还有其他隐藏的输入,我只想保存表中的输入。
当我这样做时,.closest("tbody")
的内容只不过是这样:
html
我在做什么错?如果我执行"[object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement]"
,那么它实际上会向控制台吐出正确的内容,那么为什么它不能正确地附加到console.log(hidden_items[i])
字符串中呢?
答案 0 :(得分:2)
这是因为您的元素是HTML元素(不是字符串),并且您试图将其附加到字符串中。这将尝试将对象转换为字符串,即[object HTMLInputElement]
。
此功能在您的控制台中起作用的原因是它很聪明,并且了解它是一个元素,因此它在DOM中将您直接链接到它,并向您显示它的含义。如果您致电console.log(hidden_items[i].toString())
,则会看到[object HTMLInputElement]
。
您有2个选择:
#1。将HTML文本附加到html字符串。这不会复制诸如事件监听器/隐藏项之类的内容,而这些内容可能不会在原始HTML中显示:
var hidden_items = $("input[type='hidden']");
var html = "";
for ( var i = 0, l = hidden_items.length; i < l; i++ ) {
if (hidden_items[i].closest("tbody") !== null) {
html += hidden_items[i].outerHTML;
}
}
#2:创建一个div / span或元素数组,然后使用jQuery append()
将它们添加到DOM:
var hidden_items = $("input[type='hidden']");
var html = [];
for ( var i = 0, l = hidden_items.length; i < l; i++ ) {
if (hidden_items[i].closest("tbody") !== null) {
html.push(hidden_items[i]);
}
}
$('#toplace').append(html);