在ajax 监听函数里面动态插入的标签节点,经过反复尝试,无法获取该标签的操作节点,Console.log结果总是null。

发布于 2022-09-04 12:48:18 字数 1452 浏览 36 评论 0

<ul id="list">

</ul>
<script src="AjaxBase.js"></script>
<script>
var xhr = createXHR();
var name = "hh";
var olist = document.getElementById('list');
function read() {
    xhr.open('GET', 'show.php?type=query', true);
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            //刷新页面
            //得到返回的数据
            var oJson = JSON.parse(xhr.responseText);
            olist.innerHTML = '';

            if (oJson.status == 1) {

                for (var i = oJson.data.length - 1; i >= 0; i--) {
                    var span = document.createElement("span");
                    var img = document.createElement("img");
                    span.innerHTML = oJson.data[i].name + ':' + oJson.data[i].content;
                    var li = document.createElement("li");
                    li.appendChild(img);
                    li.appendChild(span);
                    var p = document.createElement("p");
                    p.innerHTML = "<label id='sp1'>编辑</label><label id='sp2'>删除</label>";
                    li.appendChild(p);
                    document.getElementById('list').appendChild(li);
                }
            }
        }

    }
    xhr.send(null);
}
timer = setInterval(read, 1000);
var obj = document.getElementById("sp1");
console.log(obj);// 显示null,获取不到?
</script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

你げ笑在眉眼 2022-09-11 12:48:18

建议题主了解下异步编程,和js中回调函数的执行方式。
对你你的代码,有两点,第一因为你调用了setInterval(),所以

timer = setInterval(read, 1000);

这句代码只是让浏览器在1s后把这个函数放如event loop中,等待执行,然后会立马返回接着执行你后面的getEl和console,所以别说获取了,在你console的时候,read都压根没有执行,这个可以通过在read中加console来证明。
再退一步,即使你不是通过setInterval来调用read,而是直接调用read,那也无法获取,道理同上,只不过这次read确实执行了

当爱已成负担 2022-09-11 12:48:18

你也说了是监听函数里动态添加的。
也就意味着是在异步回调里添加的。
而异步函数是在JS的主线程结束之后才会被执行。
而你的var obj = document.getElementById("sp1");是非异步的。
他的执行要比异步回调要早,所以在你的dom结构里有这个元素之前上述语句就已经获取过了,所以是null
具体的可以查一下event loop

旧时光的容颜 2022-09-11 12:48:18

因为ajax一般是异步的,你获取数据的时候,下面的获取dom的代码已经执行了

梦回旧景 2022-09-11 12:48:18

事件代理,把事件代理在document上,根据触发的元素绑定事件

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文