javascript - 面对未知的页面(别人的页面),怎么定时更新DOM的事件绑定?
迷茫
迷茫 2017-04-11 10:20:58
[JavaScript讨论组]

本人想要实现一个获得被点击页面元素的xpath的chrome扩展,目前是冒泡机制,在页面所有元素绑定一个click事件,在响应的函数里面记录自己的标签以及相对位置啥的。

但是现在遇到一个问题,就是可能是网页上的一些元素可能在加载的时候没能绑定上这个事件,也许是因为ajax的异步更新或者是其他原因,导致的结果是点击这些元素的时候只会显示一部分的xpath,也就是说click事件一路向上冒泡,直到节点是已经被绑定的节点的时候才输出信息。

具体的现象就是,点击页面一个元素,只输出一部分xpath。本来觉得如果是元素没加载完可以setTimeout一下,然并卵。然而,如果刷新页面的话,再点击元素却可以得到正确的路径。

不知道这个问题如何解决,还请各位大佬们指点!

代码:

        $(*).on("click",function(e) {
          var route = "/"+$(this).prop("tagName")+"["+($(this).parent().children($(this).prop("tagName")).index($(this))+1)+"]";
          console.log(route);
          Add(route);
        });

更改后的代码:

document.addEventListener('click',function handler(e){
          var route = "/"+$(e.target).prop("tagName")+"["+($(e.target).parent().children($(e.target).prop("tagName")).index($(e.target))+1)+"]";
          console.log(route);
          console.log(e.target.tagName);
          var p = e.target;

          while(p!=this){
            p = p.parentNode;
            var route = "/"+$(p).prop("tagName")+"["+($(p).parent().children($(p).prop("tagName")).index($(p))+1)+"]"+route;
            console.log(p.parentNode);
            console.log(route);
          }
    },false);

有问题的页面:

http://www.duitang.com/blog/?...

具体就是堆糖网的图片的那个切换的箭头。
额,原来的代码在刷新之后能够截获准确地便签,而如今的代码刷新后也没法截获的样子。
————————————————————————————分割线——————————————————————————————
以上代码是可以用的,因为控制台是能够正确输出的,应该是别的什么原因,感谢各位高手们的回答!

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
黄舟

其实你这里可以用事件委托:

    $(window).on("click",function(e){});

好处:即使是后添加的节点也没有问题;
缺点:
1.遇到$(window).off("click")就oooooop了;
2.遇到e.stopPropagation()也一样ooooop


针对以上两点问题,可以换成这种:

//在捕获阶段触发事件
document.addEventListener("click",function handler(e){console.log(e)},true);
//删除事件
document.removeEventListener("click",handler);
    
大家讲道理

使用事件代理,通过this来识别被点击的元素是哪一个

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号