You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress Image Map Pro插件SVG元素jQuery遍历失效求助

问题:无法在页面加载时获取Image Map Pro生成的SVG元素属性

我用WordPress的Image Map Pro插件生成了带可点击区域的SVG平面图,插件会在页面加载时生成对应HTML代码。我想通过jQuery遍历这些SVG元素获取data-title属性值,但页面加载时的遍历代码找不到任何元素;点击某区域后执行相同遍历代码却能成功获取所有元素。我注意到插件JS文件是最后加载的,即使把我的JS文件放在插件JS之后加载也没用。遍历非插件生成的SVG元素一切正常,只有插件生成的SVG元素需要触发点击这类操作才能被遍历到。

无效代码

jQuery(document).ready(function(){
    jQuery( ".imp-objects" ).each(function() {
        let valueObjectMapSingleProduct = jQuery(this).attr('data-title');
        console.log("toto");
    });
});

有效代码

jQuery('.liste-boutique-nav li').click(function(){
    jQuery( ".imp-objects" ).each(function() {
        let valueObjectMapSingleProduct = jQuery(this).attr('data-title');
        console.log("toto");
    });
});

问题原因

Image Map Pro插件是异步动态生成SVG元素的,哪怕插件JS最后加载,它内部可能通过AJAX或延迟渲染的方式生成DOM,document.ready触发时,.imp-objects元素还未插入页面,因此遍历不到。而点击事件触发时,插件已完成SVG渲染,所以能找到元素。

解决办法

1. 监听插件自定义渲染完成事件

多数动态渲染插件会提供自定义事件,查看Image Map Pro文档,若存在类似imp:renderComplete的事件,可在回调中执行遍历:

jQuery(document).on('imp:renderComplete', function() {
    jQuery(".imp-objects").each(function() {
        let valueObjectMapSingleProduct = jQuery(this).attr('data-title');
        console.log(valueObjectMapSingleProduct);
    });
});

2. 使用MutationObserver监听DOM变化

若插件无自定义事件,用MutationObserver监听目标容器的DOM变化,当.imp-objects元素被添加时执行遍历:

jQuery(document).ready(function() {
    // 替换为插件生成的SVG父容器实际选择器(可通过浏览器控制台查看)
    const targetNode = document.querySelector('.imp-container');
    const observerOptions = {
        childList: true,
        subtree: true
    };

    const observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            if (mutation.addedNodes.length > 0) {
                const impObjects = jQuery(".imp-objects");
                if (impObjects.length > 0) {
                    impObjects.each(function() {
                        let valueObjectMapSingleProduct = jQuery(this).attr('data-title');
                        console.log(valueObjectMapSingleProduct);
                    });
                    observer.disconnect(); // 完成后停止监听,避免重复执行
                }
            }
        });
    });

    if (targetNode) {
        observer.observe(targetNode, observerOptions);
    }
});

3. 临时延迟执行(不推荐长期使用)

通过延迟执行等待插件完成渲染,时间可根据实际情况调整:

jQuery(document).ready(function() {
    setTimeout(function() {
        jQuery(".imp-objects").each(function() {
            let valueObjectMapSingleProduct = jQuery(this).attr('data-title');
            console.log(valueObjectMapSingleProduct);
        });
    }, 2000); // 延迟2秒执行
});

内容的提问来源于stack exchange,提问作者Nicolas Poiteau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:23:27