0

我有一个链接,我在该链接上生成点击事件的输入、标签和文本,我想在同一链接的下一次点击事件中将其删除:

它不起作用,这是我的新代码:

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);
}

};

}());

var tab = ['one', 'two','three','four','five']  
var label = document.createElement('label');
var i = 0;

window.onclick = function () {

     addAnswer(tab);    
}
4

1 回答 1

0

每次调用该函数时,都会创建一个新的执行上下文。所以当你这样做时:

if(label) {
    label.parentNode.removeChild(label)
}

那么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
    }
  };
}());

上面将在第一次单击时添加一个标签,然后在下一次单击时将其删除。但它一次只适用于一个标签。这是您想要的,还是您希望能够添加很多元素?如果是这样,您可以将引用存储在数组中,然后遍历数组以删除它们。

于 2013-10-30T00:38:51.523 回答