从一个简单的组件化封装写优化DOM操作
2018-06-24 00:15:59来源:未知 阅读 ()
/* *缺点 * 1. 还需要我们自己手工维护dom状态,以数据的思想去思考 *2. 数据改变后,还需要我们自己手动改变dom *3. * */ class LikeButton{ constructor(){ //定义一个状态 this.state={ liked:false } } createDOMFromString(domStr){ let div=document.createElement('div'); div.innerHTML=domStr; return div.children[0]; } //如果原来有,现在没有,添加这个属性 //如果原来有,现在有,覆盖这个属性 setState(newState){ this.state=Object.assign(this.state,newState); //先缓存老的dom对象 let oldEle=this.ele; //生成一个新的dom对象 let newEle=this.render(); //替换老的dom对象 oldEle.parentNode.replaceChild(newEle,oldEle); } //render返回值决定了此组件长什么样子 // dom字符串永远只有一个顶级元素 //因为我们dom字符串是又state决定的,所以只需要在修改了state之后从新reader一下 //事件处理函数需要绑定this为组件的实例 handleClick(event){ //修改状态 this.setState({liked:!this.state.liked}) } render(){ this.ele=this.createDOMFromString( ` <button id="like-button"> <span id="like-text" style="color:red">${this.state.liked?'取消':'点赞'}</span> </button> ` ); this.ele.addEventListener('click',this.handleClick.bind(this)); return this.ele; } }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div class="wrapper"> </div> </body> <script src="LikeButton.js"></script> <script> let likeButton=new LikeButton(); let wrapper=document.querySelector(".wrapper"); wrapper.appendChild(likeButton.render()) </script> </html>
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- JS简单去除数组中重复项的方法 2020-03-16
- jQuery异步提交表单的两种方式 2020-03-12
- JS判断浏览器是否安装flash插件的简单方法 2020-03-12
- JavaScript简单下拉菜单特效 2020-02-22
- 默认让页面的第一个控件选中的javascript代码 2020-02-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash