美文网首页
(四)实践JavaScript之编辑微博

(四)实践JavaScript之编辑微博

作者: 马梦里 | 来源:发表于2017-12-09 13:45 被阅读0次
模板
var weiboTemplate = function(weibo){
    // 将一类的元素用class表示,将特定的元素用id表示
    var w = `
        <div class='weiboCell'>
            <span id=weibo${weibo.id} data-id=${weibo.id}>${weibo.content}</span>
            <button class='class-weibo-delete' data-id=${weibo.id}>删除</button>
            <button class='class-weibo-edit' data-id=${weibo.id}>编辑</button>
        </div>
    `
    return w
}
前端路由
var bindEvents = function(){
    bindEventWeiboAdd()
    bindEventWeiboDlete()
    bindEventWeiboEdit()
    bindEventWeiboUpdate()
}

一、主函数(插入编辑框)

逻辑:
    点击微博的编辑按钮,将弹出一个输入框和更新按钮;
1.在微博内容旁边新增编辑按钮,编辑按钮内含有weibo的id;
2.获取整个weibo块,并绑定事件,实施事件委托;
3.如果点击的按钮中包括某个类(编辑按钮),将插入weibo编辑入口;

var bindEventWeiboEdit = function(){
    var weiboList = e('#id-weibo-list')
    log('majun')
    weiboList.addEventListener('click', function(event){
        var self = event.target
        log('self是:', self)
        //  这个 class 不需要加 .
        if (self.classList.contains('class-weibo-edit')){
            log('点击的self是:', self)
            insertweiboEdit(self)
        }
    })
}

注意:
insertweiboEdit()函数传递的是self,表示点击的当前按钮,这个按钮中有当前weibo的id,可以将这个id传递给输入框或更新按钮;

辅助函数
var weiboeditTemplate = function(weibo_id){
    var e = `
        <div class='class-weibo-edit-form'>
            <input class = 'class-weibo-edit'>
            <button class='class-weibo-edit' data-id=${weibo_id}>更新</button>
        </div>
    `
    return e
}

var insertweiboEdit = function(self){
    //  获取父元素  closest
    var weiboCell = self.closest('.weiboCell')
    var weibo_id = self.dataset.id
    // 传递 当前微博的id
    var weiboeditCell = weiboeditTemplate(weibo_id)
    weiboCell.insertAdjacentHTML('beforeEnd', weiboeditCell)
}

1.利用closest()获取父元素,里面的class可以是父元素的,也可以是祖父元素的;


二主函数(实现编辑功能)

逻辑:
1.点击更新按钮,将值发送给后端;
2.后端函数根据传过去的weibo id以及form里面的值,更新weibo;
3.获取服务器返回的数据,更改weibo的显示
4.移除weibo编辑框;

var bindEventWeiboUpdate = function(){
    var weiboList = e('#id-weibo-list')
    weiboList.addEventListener('click', function(event){
        var self = event.target
        if (self.classList.contains('class-weibo-update-button')){
            //  获取值的套路
            log('点击的按钮:', self)
            //  经常忘记这个 ‘.’
            var weiboeditForm = self.closest('.class-weibo-edit-form')
            //  写成了 querySelector
            var weiboInput = weiboeditForm.querySelector('.class-weibo-edit-input')
            var content = weiboInput.value
            var weibo_id = self.dataset.id
            var form = {
                content: content,
                id: weibo_id
            }
            log('提交的数据是:', form)
            apiweiboUpdate(form, function(r){
                var weibo = JSON.parse(r)
                var weiboCell = self.closest('.weiboCell')
                var weibo_content = weiboCell.querySelector('.class-weibo-content')
                weibo_content.innerText = weibo.content
                self.parentElement.remove()
            })
        }
    })
}

知识点:

  • 事件委托;
  • ele.closest()函数获取父/祖父元素,别忘记加 ‘.’;
  • ele.querySelector()函数可以查找ele的子元素,S大写;
    -- document元素就相当于html的父元素;
  • 更新显示的weibo内容有点绕;

相关文章

  • (四)实践JavaScript之编辑微博

    模板 前端路由 一、主函数(插入编辑框) 逻辑:点击微博的编辑按钮,将弹出一个输入框和更新按钮;1.在微博内容旁边...

  • (三)实践JavaScript之删除微博

    一、前端路由 二、主体函数 逻辑:1.在.weiboCell里面增加删除按钮,含有类以及weibo id;2.给整...

  • (二)实践JavaScript之index增加微博

    增加功能:不能增加空白(多长才能增加) 一、前端路由 二、编写函数增加函数的逻辑是:只有一个微博编辑的输入框,因此...

  • [记录]我的设计模式学习路径

    书单 《JavaScript 设计模式与开发实践》《设计模式之美》《掘金小册-JavaScript 设计模式核⼼原...

  • 微习惯实践之四

    今天发生了两件事让我看到人身体的脆弱。 一是周日跑步时不小心绊倒了朋友,他摔了一跤,手撑地的时候戳着小拇指,当天就...

  • JavaScript检测原始值、引用值、属性

    上周写过一篇读书笔记《编写可维护的JavaScript》之编程实践,其中 第8章 避免『空比较』是博主在工作中遇坑...

  • 微博推广和微博养号

    编辑者:zhuzhu 一、如何微博推广

  • 另一个极端

    摘自:微博 微博正文 ... 东东枪 22-7-323:43 来自微博weibo.com 已编辑发布于北京 改吧,...

  • JavaScript中this的使用

    js中this的四种用法 参考博文JavaScript中this的四个绑定规则总结 在JavaScript中每一个...

  • Javascript

    JS基础 《Javascript原理、方法与实践》 《JS原理、方法与实践》- Javascript简介 《JS原...

网友评论

      本文标题:(四)实践JavaScript之编辑微博

      本文链接:https://www.haomeiwen.com/subject/dmiuixtx.html