老师帮看下吧,获取兄弟节点 previousSibling 为何不起作用?
来源:4-15 编程练习
慕九州7567404
2019-02-18 10:59:18
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> .box{ line-height: 30px; margin: 40px; } .box>input{ width: 60%; height: 30px; border-radius: 6px; } .box>label{ display: inline-block; width: 100px; height: 30px; line-height: 30px; text-align: center; } .box .submit{ margin-left: 100px; display: block; width: 100px; background-color: #0077aa; } .error-msg{ color: red; margin-left: 100px; font-size: 14px; } </style> </head> <body> <form action="" id="forms"> <div class="box"> <label for="name">用户名:</label> <input type="text" id="name" required /> </div> <div class="box"> <label for="email">邮箱:</label> <input type="email" id="email" required /> </div> <div class="box"> <input class="submit" type="submit" value="提交" id="submit"/> </div> </form> <script> //阻止默认事件,1、当input框验证失败时阻止默认事件 function replaceValidationUI(form) { //监听验证不通过信息, form.addEventListener("invalid", function(event) { event.preventDefault(); }, true); form.addEventListener("submit", function(event) { //监听表单提交信息,验证不通过,阻止默认事件发生 if (!this.checkValidity()) { event.preventDefault(); } }, true); //给提交按钮绑定事件 var btn = document.getElementById('submit'); btn.addEventListener('click',function () { //去除添加的自定义信息 然后给验证不通过的input的父级元素添加自定义信息框 var errorMsg = form.querySelectorAll('.error-msg'), //利用表单的伪类获取未通过验证的输入框 invalidOBbj = form.querySelectorAll(':invalid'); for(var i =0;i<errorMsg.length;i++){ //移除之前添加的错误信息 errorMsg[i].parentNode.removeChild(errorMsg[i]); } for(var j =invalidOBbj.length-1;j>=0;j--){ //获取兄弟节点 invalidOBbj[j].previousSibling 为何不起作用? var bros =invalidOBbj[j].parentNode.childNodes[1]; //添加自定义的错误信息 invalidOBbj[j].parentNode.parentNode.insertAdjacentHTML("afterBegin","<div class='error-msg'>"+ bros.innerHTML + invalidOBbj[j].validationMessage +"</div>"); } }); } var form = document.getElementById("forms"); replaceValidationUI(form); </script> </body> </html>
1回答
你好,因为label和input标签之间有文本节点text,所以获取上一个节点是text。
改变一下html结构:
label和input标签挨着一起写。
然后再使用invalidOBbj[j].previousSibling试试。
祝学习愉快!
相似问题