Chrome扩展如何获取JS动态生成的网页元素?

网页上的很多元素都是通过js动态生成(点击某个button后生成一些例如textArea的元素),如何在这些动态元素生成后,通过Chrome扩展中content.js来获... 网页上的很多元素都是通过js动态生成(点击某个button后生成一些例如textArea的元素),如何在这些动态元素生成后,通过Chrome扩展中content.js来获取这些元素。如果我在元素生成之前用id、className等方式获取得到的都是Null。 展开
 我来答
Kenn
2018-03-16 · TA获得超过517个赞
知道小有建树答主
回答量:703
采纳率:82%
帮助的人:199万
展开全部

如果想去给这些并不是由你控制动态生成出来的元素绑定事件应该是不可能的。

但是可以给顶层的document绑定事件来判断点击的是哪个元素。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>

<div id='container'></div>
<button id='btn'>生成html</button>

<script>
window.addEventListener('DOMContentLoaded', function() {
    var btn = document.querySelector('#btn')
    var container = document.querySelector('#container')
    // 点击btn动态生成数据
    btn.addEventListener('click', function() {
        container.innerHTML = ''
        container.innerHTML += '<ul class="list"><li>2j13j13ji13kj2kjk2</li><li>sadascc</li><li>sabbbb</li><li>3241241</li></ul>'
        container.innerHTML += '<p>时间戳: ' + (new Date).getTime() + '</p>'
    })
    
    /*
        document 绑定click事件,
        document是顶层的html,通过绑定顶层的html去判断动态生成的节点是否存在,如果存在就执行
    */
    document.addEventListener('click', function(e) {
        var target = e.target // click指向的节点
        var nodeName = target.nodeName.toLocaleLowerCase()  // click指向的节点tag
        if ( nodeName === 'li' ) {
        // 如果存在就执行,这里生成的是li tag,所以这里成立,显示了li.textContent的内容
        alert(target.textContent)
        }
    })
})
</script>
</body>
</html>
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式