2015-12-21 71 views
0

在下面的代码,为什么删除操作符操作符不会删除NodeList类的属性?

<form action="javascript:void(0)" method="GET" enctype="multipart/form-data"> 
      <fieldset> 
       <legend>Details</legend> 
       Enter the name: <input id="name" name="name" type="text" size="30" 
           onblur="isTheValueValid(this, document.getElementById('name_help'));"> 
       <span id="name_help"></span> 
       <br> 
      </fieldset> 
     </form> 

<script type="text/javascript"> 
      function deleteAllChildren(spanElementObject){ 
       if(spanElementObject != null){ 
         var nodeList = spanElementObject.childNodes; 
         [].forEach.call(nodeList,function(property){ 
          delete property; 
         }); 
       } 
      } 
      function editSpanElementText(regex, inputElementValue, spanElementObject, helpMessage){ 
       deleteAllChildren(spanElementObject); 
       if(!regex.test(inputElementValue)){ 
        spanElementObject.appendChild(document.createTextNode(helpMessage)); 
        return false; 
       }else{ 
        return true;  
       } 
      } 
      function isTheValueValid(inputElementObject, spanElementObject){ 
       return editSpanElementText(
            /^[\u0041-\u005A\u0061-\u007A\.\' \-]{2,15}\s?[\u0041-\u005A\u0061-\u007A\.\' \-]{0,15}\s?[\u0041-\u005A\u0061-\u007A\.\' \-]{2,15}$/, 
            inputElementObject.value, 
            spanElementObject, 
            'Please enter a valid name.');  
      } 
     </script> 

对于第一次尝试,输入元素,错误信息上失去焦点,Please enter a valid name.获取呈现在给予错误输入值。

对于第二次尝试,在输入元素失去焦点时,错误消息Please enter a valid name.在给出正确的输入值时没有被移除。

调试时forEach不会删除#text子节点。

为什么delete不会删除属性?

+0

http://perfectionkills.com/understanding-delete/ – Bergi

+0

您正在寻找https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove或者更简单的https: //developer.mozilla.org/en-US/docs/Web/API/Node/removeChild – Bergi

+0

@Bergi现在'removeChild'不是我要找的东西。我试图理解为什么'delete'不起作用。对于这个重复的问题,我感到不舒服。我正在阅读你对'删除'的参考。这是一篇很长的文章 – overexchange

回答

1

为什么delete不能删除子元素?

你让这里有两个大错误:

+0

行。 *激活对象(对于函数代码)或全局对象(对于全局代码),这些属性是使用DontDelete属性创建的。*因此,传递给上述代码中的回调函数的'property'具有'DontDelete'属性?如何使用代码验证该属性值? – overexchange

+0

是的,就是这么说的。变量不能被删除(除了在某些边缘情况下) – Bergi

+0

您可以通过尝试删除它并接收'false'或异常来进行验证。 – Bergi