for for in 给已有的li绑定click事件生成新的li也有click事件
想要给已有的li元素绑定一个click事件,点击生成新的li元素,并且新的li元素也要有click事件
//不能用for循环给每个li绑定click事件 因为这样的话 后面新生成的li就没有click事件
//即使用下面的获取dom元素方法 具有实时性 也不能给新生成的li绑定clcik事件 这两个方法是 实时的 HTMLCollection 不能直接forEach循环
let ali1 = oul.getElementsByClassName('li')
let ali2 = oul.getElementsByTagName('li')
//不是 实时的 但是 NodeList 可以直接使用forEach
let ali3 = document.querySelectorAll('.li')
let ali4 = document.getElementsByName('li')
方法:要用事件代理
//事件代理
commmentUl.onclick = function (e) {
// console.log(e.target)
let target = e.target
if(target.tagName.toLowerCase()=='a'){//点击回复按钮 出现回复框
form = target.parentNode.lastElementChild
console.log(form)
formDisplay = getStyle(form, 'display')
if (formDisplay == 'none') {
form.style.display = 'block'
form.children[0].setAttribute('autofocus', true)
} else {
form.style.display = 'none'
}
}
if(target.type=='reset'){//取消按钮
target.parentNode.style.display = 'none'
}
if(target.type=='button'){//回复按钮 发表评论
let content = target.parentNode.children[0].value
let news_id = target.parentNode.getAttribute('news-id')
let parent_id = target.parentNode.getAttribute('comment-id')
let that = target
if (!content) {
message.showError('评论内容不能为空')
return
}
let data = {
content,
news_id,
parent_id
}
$.ajax({
url: '/news/' + news_id + '/comments/',
type: 'POST',
data: JSON.stringify(data)
})
.success(function (res) {
// console.log(this)
if (res.errno == '0') {
// console.log(res.data)
let li = `
<li class="comment-item">
<div class="comment-info clearfix">
<img src="/static/images/avatar.jpeg" alt="avatar" class="comment-avatar">
<span class="comment-user">${ res.data.author }</span>
</div>
<div class="comment-content">${ res.data.content }</div>
<div class="parent_comment_text">
<div class="parent_username">${ res.data.parent.author }</div>
<br/>
<div class="parent_content_text">
${ res.data.parent.content }
</div>
</div>
<div class="comment_time left_float">${ res.data.update_time }</div>
<a href="javascript:;" class="reply_a_tag right_float">回复</a>
<form class="reply_form left_float" comment-id="${ res.data.comment_id }"
news-id="${ res.data.news_id }">
<textarea class="reply_input"></textarea>
<input type="button" value="回复" class="reply_btn right_float">
<input type="reset" name="" value="取消" class="reply_cancel right_float">
</form>
</li>`
$(commmentUl).prepend(li)
that.parentNode.style.display = 'none'
} else if (res.errno == '4101') {
message.showError('用户未登录')
setTimeout(function () {
window.location.href = '/user/login/'
}, 1000)
}
})
.error(function () {
message.showError('服务器错误,请重试')
})
}
}
for循环过程中增加新元素:
let arr=[1,2,3]
for(let i =0;i<arr.length;i++){
if(i==0)arr[0+3]=4
console.log('本次循环i的值:'+i)
}
本次循环i的值:0
本次循环i的值:1
本次循环i的值:2
本次循环i的值:3
let arr=[1,2,3]
for(let i =0,len=arr.length;i<len;i++){
if(i==0)arr[0+3]=4
console.log('本次循环i的值:'+i)
}
//在循环初始化时候 len=3,即使在循环过程中arr长度改变,len也不会变了
本次循环i的值:0
本次循环i的值:1
本次循环i的值:2
for in循环
let obj = {name:'wl',age:21}
for(let i in obj){
if(i == 'name')obj['sex'] = 'man'
console.log(obj[i])
}
'wl'
21
//不会输出'man' 因为for in 循环在循环开始前计算obj一次 之后即使在循环过程中obj新增也不会遍历到新增的
//如果在循环过程中删除已有的未遍历的属性 也不会遍历到
for for in 给已有的li绑定click事件生成新的li也有click事件的更多相关文章
- 通过jQuery给<li>绑定点击事件
背景:有个需求需要js中实现li标签的事件绑定,li通过在ajax请求中动态添加,按照常理,使用jQuery,可以使用以下方法绑定点击事件: $(function(){ commonAjaxCall ...
- 在li元素中放入img图片时li的高度问题
在li元素中放入img图片时li的高度会比img图片的高度多出几个像素,解决这个问题只需要将img元素的css设置成vertical-align: middle;就可以解决.
- 如何用Apache POI操作Excel文件-----如何在已有的Excel文件中插入一行新的数据?
在POI的第一节入门中,我们提供了两个简单的例子,一个是如何用Apache POI新建一个工作薄,另外一个例子是,如果用Apache POI新建一个工作表.那么在这个章节里面,我将会给大家演示一下,如 ...
- 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。
题目: 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数,该函数能够生成1-10的随机数. 思路: 假如已知一个函数能够生成1-49的随机数,那么如何以此生成1-10的随机数呢? 解法 ...
- 使用Apache POI操作Excel文件---在已有的Excel文件中插入一行新的数据
package org.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx ...
- JS练习--自动生成100个li
点击按钮,自动生成100个li,红.黄.蓝.绿四种颜色的顺序显示出现在页面中 CSS: ;;} ul,li{list-style: none;} #ul1{position: relative;} # ...
- JS如何给ul下的所有li绑定点击事件,点击使其弹出下标和内容
这是一个非常常见的面试题,出题方式多样,但考察点相同,下面我们来看看这几种方法:方法一: var itemli = document.getElementsByTagName("li&quo ...
- JS 循环给li绑定参数不同的点击事
以下内容纯属个人理解,不正确的地方还请大神留言,不胜感激! 源代码:(按个人方式选用一种即可) <ul> <li>1</li> <li>2</li ...
- js循环给li绑定事件实现 点击li弹出其索引值 和内容
代码如下: html代码 <ul> <li>房产</li> <li>家居</li> <li>二手房</li> < ...
随机推荐
- Java连载23-for循环练习、while\dowhile详解
一.for循环练习 1.例子:输入九九乘法表 public class d23_{ public static void main(String[] args) { for(int i = 1;i&l ...
- 8、kubernetes之存储卷资源
一.存储卷的类型 emptyDir:在宿主机上分一块内存空间给pod当做存储空间 hostPath:在宿主机上分一块磁盘空间给pod当做存储空间 网络存储: SAN:iSCSI,FC NAS:nfs, ...
- 【JVM从小白学成大佬】6.创建对象及对象的访问定位
<JVM从小白学成大佬>系列推出到现在,收到了很多小伙伴的好评,也收到了一些小伙伴的建议,在此表示感谢. 有几个小伙伴提出了希望出一篇介绍对象的创建及访问,猿人谷向来是没有原则的,小伙们要 ...
- P2518 [HAOI2010]计数 类似数位dp
题意 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. 现 ...
- HDU 4607 Park Visit 树的最大直径
题意: 莱克尔和她的朋友到公园玩,公园很大也很漂亮.公园包含n个景点通过n-1条边相连.克莱尔太累了,所以不能去参观所有点景点. 经过深思熟虑,她决定只访问其中的k个景点.她拿出地图发现所有景点的入口 ...
- codeforces 810 D. Glad to see you!(二分+互动的输入方式)
题目链接:http://codeforces.com/contest/810/problem/D 题意:两个人玩一场游戏要猜出Noora选的f种菜的任意两种.一个人猜点另一个人回答 TAK如果 ,(x ...
- php preg_match pcre回溯绕过
原理需要知识:正则NFA回溯原理,php的pcre.backtrack_limit设置. 正则NFA回溯原理正则表达式是一个可以被"有限状态自动机"接受的语言类."有限状 ...
- 利用GPU训练网络时遇到的一些问题
1. OSError: [Error 12] Cannot allocate memory 解决办法: 出现这个错误时我是绝望的...因为我看了别人的解决办法,要加内存条才能解决...但是我不甘心,想 ...
- .gitignore文件失效的解决方案
通常在idea中,我们使用git进行项目管理的时候,一些不需要的文件如.idea,.target文件不需要上传至gitlab仓库,这时,就需要在项目中定义一个.gitignore文件,用来标识这些文件 ...
- centos 6.5 搭建DHCP实验
搭建DHCP服务 安装DHCP服务 挂载光盘:mount /dev/cdrom /qswz 从光盘的安装包中安装DHCP rpm -ivh dhcp-4.1.1-38.P1.el6.centos.i6 ...