Javascript在单击时创建removeChild和appendChild
我有一个链接,在单击事件中生成输入、标签和文本,我想在同一链接的下一次单击事件中删除该链接: 它不起作用,这是我的新代码:Javascript在单击时创建removeChild和appendChild,javascript,html,Javascript,Html,我有一个链接,在单击事件中生成输入、标签和文本,我想在同一链接的下一次单击事件中删除该链接: 它不起作用,这是我的新代码: var addAnswer = (function() { var label; var text; return function (array_output) { label.parentNode.removeChild(label); label.removeChild(text); text = null; label =
var addAnswer = (function() {
var label;
var text;
return function (array_output) {
label.parentNode.removeChild(label);
label.removeChild(text);
text = null;
label = null;
label = document.createElement('label');
text = document.createTextNode(array_output[i]);
document.body.appendChild(label)
label.appendChild(text);
};
}());
var tab = ['one', 'two','three','four','five']
var label = document.createElement('label');
var i = 0;
window.onclick = function () {
addAnswer(tab);
i++;
}
我想看到,在点击事件中,“一”然后再点击“二”,然后再点击“三”
编辑:好的,我终于发现:
var addAnswer = (function() {
var label;
var text;
return function (array_output) {
if(label) {
label.parentNode.removeChild(label);
label.removeChild(text);
text = null;
label = null;
label = document.createElement('label');
text = document.createTextNode(array_output[i++]);
document.body.appendChild(label)
label.appendChild(text);
}else{
label = document.createElement('label');
text = document.createTextNode(array_output[i]);
document.body.appendChild(label)
label.appendChild(text);
}
})
}())
每次调用函数时,都会创建一个新的执行上下文。所以当你这样做的时候:
if(label) {
label.parentNode.removeChild(label)
}
然后标签将始终是未定义的,因为它直到稍后才被赋值。您可能需要存储对已创建元素的引用,以便以后删除它。关闭可能适用于:
var addAnswer = (function() {
// Declare label here in "outer" execution context
var label;
return function (array_output) {
// If label is truthy, assume references an element so remove it
// and then remove reference so it's available for garbage collection
if(label) {
label.parentNode.removeChild(label);
label = null;
// If label was falsey, create a new one and keep a reference
} else {
// do stuff
// don't declare label here so reference is kept using
// the variable "label" in the outer scope
label = document.createElement('label');
// do more stuff
}
};
}());
以上内容将在第一次单击时添加标签,然后在下一次单击时将其删除。但一次只对一个标签有效。这就是你想要的,还是你想添加很多元素?如果是这样,您可以将引用存储在数组中,然后在数组中迭代以删除它们。您可以改进您的问题吗,我(可能还有其他人)真的不知道您希望我们做什么。存储是否在属性中单击了元素,例如
data clicked='true'
或其他未定义变量标签的内容,你必须事先申报。也许你可以多加一点代码,这样我们就能理解你的期望。嗨,谢谢你给出了这个伟大而清晰的答案,如果我想同时创建和删除一个包含不同内容的标签,我该怎么做?假设标签中的textNode由数组生成:['textNode1'、'textNode2'、'orLabel3'、…]。我希望当我单击时,它从“textNode1”更改为数组中的另一个?删除else块,但将代码保留在其中,然后该函数将首先删除以前的标签,然后追加一个新标签。在这种情况下,该函数应该被称为reaplaceAnswer或类似的函数,因为它就是这样做的。
var addAnswer = (function() {
// Declare label here in "outer" execution context
var label;
return function (array_output) {
// If label is truthy, assume references an element so remove it
// and then remove reference so it's available for garbage collection
if(label) {
label.parentNode.removeChild(label);
label = null;
// If label was falsey, create a new one and keep a reference
} else {
// do stuff
// don't declare label here so reference is kept using
// the variable "label" in the outer scope
label = document.createElement('label');
// do more stuff
}
};
}());