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新增也不会遍历到新增的
//如果在循环过程中删除已有的未遍历的属性 也不会遍历到

原文地址:https://www.cnblogs.com/banxing/p/11616818.html

时间: 2024-08-27 22:47:34

for for in 给已有的li绑定click事件生成新的li也有click事件的相关文章

asp.net中Repeater中用ul li绑定数据

<ul class="tit1"> <asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <li> <p class="tit1-p-1"> <img style="border: 0px;" src="/image/biaozhi.jpg" /> &

已知一个函数rand5()能够生成1-5的随机数,请给出一个函数,该函数能够生成1-7的随机数。

这是朋友去笔试的一道题,有点考智商,当时我还很自信的说 random5+random5/2  不就可以了 他说不行,然后我就在网上搜了一下 有一道类似的题目 题目: 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数,该函数能够生成1-10的随机数. 思路: 假如已知一个函数能够生成1-49的随机数,那么如何以此生成1-10的随机数呢? 解法: 该解法基于一种叫做拒绝采样的方法.主要思想是只要产生一个目标范围内的随机数,则直接返回.如果产生的随机数不在目标范围内,则丢弃该值,重新取

JS练习--自动生成100个li

点击按钮,自动生成100个li,红.黄.蓝.绿四种颜色的顺序显示出现在页面中 CSS: *{padding: 0;margin: 0;} ul,li{list-style: none;} #ul1{position: relative;} #ul1 li{ width: 48px; height: 48px; border: 1px solid #ccc; float: left; margin-right: 10px; margin-top: 10px; text-align: center;

如何利用jquery在任意指定li元素后面插入新的li元素

如何利用jquery在任意指定li元素后面插入新的li元素:本章节介绍要一下如何利用jquery实现将一个新的li元素插入到任意li元素的后面.原生的javascript可以使用insertBefore()函数,具体可以参阅javascript的insertBefore.insertAfter和appendChild简单介绍一章节.下面介绍一下如何利用jquery实现此功能.代码实例: <!DOCTYPE html><html><head> <meta chars

(2) 如何用Apache POI操作Excel文件-----如何在已有的Excel文件中插入一行新的数据?

在POI的第一节入门中,我们提供了两个简单的例子,一个是如何用Apache POI新建一个工作薄,另外一个例子是,如果用Apache POI新建一个工作表.那么在这个章节里面,我将会给大家演示一下,如何用Apache POI在已有的Excel文件中插入一行新的数据.具体代码,请看下面的例子. import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.

DOM操作--自动生成100个li(变色版)

一.效果图. 二.HTML+CSS代码. <style>.box{ width:800px; margin:90px auto;}.btn{ padding:5px 10px; color:#fff; background:#ff6600; cursor:pointer; font-size:16px; border-radius:5px;}.list{ position:relative; margin-top:20px;}.list li{ width:50px; height:50px;

兼容性—IE6/7下当li里面的元素都浮动,li之间会产生4px的缝隙

代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> ul{ margin: 0px; padding: 0px; width: 300px; list-style: none; } li{ height: 30px; line-heig

如何用Apache POI操作Excel文件-----如何在已有的Excel文件中插入一行新的数据?

在POI的第一节入门中,我们提供了两个简单的例子,一个是如何用Apache POI新建一个工作薄,另外一个例子是,如果用Apache POI新建一个工作表.那么在这个章节里面,我将会给大家演示一下,如何用Apache POI在已有的Excel文件中插入一行新的数据.具体代码,请看下面的例子. [java] view plain copy import java.io.File; import java.io.FileInputStream; import java.io.FileNotFound

xpath爬虫匹配 &lt;li&gt;&lt;a href=&#39;aaaa.html&#39;&gt;AAA&lt;/a&gt;&lt;/li&gt; 路径

代码: 1 page.addTargetRequests( 2 page.getHtml().xpath("//div[@class='rinfo']/a/@href").all()); 实战代码: xpath爬虫匹配 <li><a href='aaaa.html'>AAA</a></li> 路径 原文地址:https://www.cnblogs.com/smartisn/p/12247233.html