在一段字符串中的指定位置插入html标签,实现内容修改留痕

客户需求:实现内容修改留痕,并且鼠标移动到元素时,显示修改人和修改时间。

(其实呢本人觉得这个如果是静态的页面,或者是后端拼接好的html,都很好实现,如果让前端动态实现就......)

前端实现的方法或许有很多,我用了个比较笨的实现方式,结合后端返回的数据,实现如下:

               // 用json模拟后端返回的数据
                var itemList = {
                    word:"官方指南官方指南假设你已了解关于 HTML、CSS 和 JavaScript 的中级知识。如果你刚开始学习前端开发,将框架作为你的第一步可能不是最好的主意——掌握好基础知识再来吧!之前有其它框架的使用经验会有帮助,但这不是必需的。官方指南假设你已了解关于 HTML、CSS 和 JavaScript 的中级知识。如果你刚开始学习前端开发,将框架作为你的第一步可能不是最好的主意——掌握好基础知识再来吧!之前有其它框架的使用经验会有帮助,但这不是必需的。",
                    obj:[
                        {
                            s:4,
                            e:8,
                            u:'admin',
                            t:'2020-05-13',
                            type:'del',
                            text:'官方指南'
                        },
                        {
                            s:42,
                            e:87,
                            u:'admin2',
                            t:'2020-05-15',
                            type:'add',
                            text:'如果你刚开始学习前端开发,将框架作为你的第一步可能不是最好的主意——掌握好基础知识再来吧!'
                        }
                    ]
                }
                
                
                var word = itemList.word;                                                                                        
                var strLength = 0;                
                itemList.obj.map(function(item,index){
                    //截取当前字符串的前后内容
                    var preWord = word.slice(0,item.s+strLength)
                    var nextWord = word.slice(item.e+strLength,word.length+strLength);
                    
                    //判断字符串类型,添加相应标签和class
                    if(item.type == 'del'){
                        word = preWord+"<del class='wordDel' u='"+item.u+"' t='"+item.t+"'>"+item.text+"</del>"+nextWord
                        strLength += 40 + item.u.length + item.t.length 
                    }else if(item.type == 'add'){
                        strLength += 40 + item.u.length + item.t.length
                        word = preWord+"<add class='wordAdd' u='"+item.u+"' t='"+item.t+"'>"+item.text+"</add>"+nextWord
                    }
                                                                                        
                                                                                    
                })
                
                
                $(".word").html(word)
                
                $(".wordDel").hover(function(){
                    //拿到当前标签的自定义属性
                    console.log($(this).attr("u"))
                    console.log($(this).attr("t"))
                },function(){
                    //鼠标移出时的操作
                })
                
                $(".wordAdd").hover(function(){
                    //拿到当前标签的自定义属性
                    console.log($(this).attr("u"))
                    console.log($(this).attr("t"))
                },function(){
                    //鼠标移出时的操作
                })

 

最终效果如下:

 

posted @ 2020-05-14 16:02  秃头的铲屎官  Views(1986)  Comments(0Edit  收藏  举报