TEL:400-8793-956
当前位置:程序、服务器

使用querySelector遍历元素

提问者: 近期获赞: 浏览人数: 发布时间:2021-02-01 13:17:11

 问:我收到“未捕获的TypeError:无法读取null的属性'children'”,似乎找不到我错了,我检查了错误发生的位置,但似乎无法修复。谁能指出我所缺少的吗?

 
//问题:用户互动无法提供理想的结果。
//解决方案:添加交互性,以便用户可以管理日常任务。
var taskInput = document 。getElementById (“ new-task” ); // new-task var addButton = document 。getElementsByTagName (“ button” )[ 0 ]; //第一个按钮var incompleteTasksHolder = document 。getElementById (“ incomplete-task” ); //不完整的任务VAR completedTaskHolder =
   
   文件。getElementById (“ completed-task” ); // completed-task 
//添加新任务var addTask = function (){ console 。日志(“添加任务...” );//当按下按钮时//使用#new-task中的文本创建新的列表项:// input(复选框)// label // input(文本)// button.edit //button.delete //每个元素,都需要修改并附加}} //编辑现有任务var editTask = function (){ console
    
   。日志(“编辑任务...” );
//当按下编辑按钮时//如果参数是.editMode //从.editMode切换//标签文本成为输入的值// else //切换到.editMode //输入值成为标签文本// Toggle父级上的.editMode } //删除现有任务var deleteTask = function (){ console 。日志(“删除任务...” );//当按下Delete按钮时//从ul中删除父列表项} //将任务标记为完成var  
 
 taskCompleted  =  function (){
控制台。日志(“任务完成...” );// //选中此复选框//将任务列表项追加到#completed-tasks } //将任务标记为未完成var taskIncomplete = function (){ console 。日志(“任务未完成...” );///如果未选中此复选框,//将任务列表项追加到#incomplete-tasks } var bindTaskEvents = function (taskListItem ,checkBoxEventHandler ){   
    
  控制台。日志(“绑定列表项事件” );
//选择taskListItem的子对象var checkBox = taskListItem 。querySelector (“ input [type = checkbox]” ); var editButton = taskListItem 。querySelector (“ button.edit” ); var deleteButton = taskListItem 。querySelector (“ button.delete” ); //绑定editTask以编辑按钮editButton 。onclick = editTask ;  
 
    //绑定deleteTask删除按钮
deleteButton 。onclick = deleteTask ; //将checkBoxEventHandler绑定到复选框checkBox 。onchange = checkBoxEventHandler ; } //将点击处理程序设置为addTask函数addButton 。onclick = addTask ; //周期超过incompleteTaskHolder UL列表项为(VAR我= 0 ;我< incompleteTasksHolder 。孩子。长度;我++ ){    
 
    //事件绑定到列表项的儿童(taskCompleted)
bindTaskEvents (incompleteTasksHolder 。孩子[我],taskCompleted ); } //循环过incompleteTaskHolder UL列表项为(VAR我= 0 ;我< completedTaskHolderTasksHolder 。孩子。长度;我++ ){ //绑定事件清单项目的孩子(taskIncomplete)bindTaskEvents (completedTaskHolder 。孩子[我]   
 
   taskIncompleted ); 
}
<!DOCTYPE HTML> 
< HTML > 
<头部> <标题>待办事项应用</标题> <链路HREF = 'http://fonts.googleapis.com/css?family=Lato:300,400,700'相对= '样式表'类型= 'text / css' > < link rel = “ stylesheet” href = “ css / style.css” type = “ text / css” media = “屏幕” charset = “ utf-8”> </头>  
 
  <体> 
< DIV类= “容器” > < p > <标签为= “新任务” >添加项目</标签> <输入ID = “新任务”类型= “文本” > <按钮>添加< /按钮> </ p > < h3 >待办事项</ h3 > < ul id = “不完整的任务” > <     
 
        li > <输入 类型= “复选框” > <标签>支付账单</标签> <输入 类型= “文本” > <按钮 类= “编辑” >编辑</按钮> <按钮 类= “删除” >删除< /按钮> </ li > 
< li class = “ editMode” > <输入类型= “复选框” > <标签>          去购物</标签> <输入 类型= “文本” 值= “去购物” > <按钮 类= “编辑” >编辑</按钮> <按钮 类= “删除” >删除</按钮> </ li > 
</ ul > < h3 >已完成</ h3 > < ul id = “已完成任务” >< li > <
 
       
        输入 类型= “复选框”已 选中> <标签>请参阅Doctor </标签> <输入 类型= “文本” > <按钮 类= “编辑” >编辑</按钮> <按钮 类= “删除” >删除</按钮> </ li > 
</ ul > </ div > <脚本类型= “text / javascript“ src =      
    
 
      “ js / app.js” > </脚本> 
</ body > </ html >
 
 
答:您的问题似乎是您在此处定位未完成任务和完成任务:
 
var  incompleteTasksHolder   =  document 。getElementById (“ incomplete-task” ); //不完整的任务
VAR  completedTaskHolder  = 文件。getElementById (“ completed-task” ); //完成的任务
但您在此处将其命名为incomplete-taskS和complete-taskS:
 
      < ul  id = “不完整的任务” > 
< li > <输入类型= “复选框” > <标签>支付账单</标签> <输入类型= “文本” > <按钮类= “编辑” >编辑</按钮> <按钮类= “删除” >删除</按钮> </ li > <li class = “ editMode” > <            
         输入 类型= “复选框” > <标签>购物</标签> <输入 类型= “文本” 值= “购物” > <按钮 类= “编辑” >编辑</按钮> <按钮 类= “删除” >删除</按钮> </ li > 
</ ul > < h3 >已完成</ h3 > < ul
          
       id = “ completed-tasks” > 
< li > <输入类型= “复选框”已选中> <标签>请参阅Doctor </标签> <输入类型= “文本” > <按钮类= “ edit” >编辑</按钮> <按钮类= “删除” >删除</按钮> </ li > </ ul >             
      
因此,当您尝试绑定事件时,它会针对不存在的对象!
 
希望你觉得这个有用!
上一篇: Python基础知识中的Challange任务2之2
下一篇: 如果我将其声明为description = mDescription而不是相反,会有所不同吗?