在下面的代码中,
<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 :(得分:1)
为什么
delete
不会删除子元素?
你在这里犯了两大错:
delete
。 delete
operator从对象中删除属性,你没有给它一个(并且命名变量“property”不会改变任何东西)。阅读http://perfectionkills.com/understanding-delete/。NodeList
删除属性会改变DOM。除了它们可能是不可删除的,这不是DOM的工作方式,只是改变JS对象的属性是不够的。您需要使用DOM API,在本例中为removeChild
。另请参阅Remove all child elements of a DOM node in JavaScript了解您实际想要做的事情。