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

基于swisnl的jQuery contextMenu:按点击元素添加自定义数据

嘿,我来帮你搞定这个给contextMenu添加自定义数据的问题!针对你那两个带with-cool-menu类的div,我们可以利用swisnl的jQuery-contextMenu插件的回调功能,根据点击元素的属性动态注入内容,这里有两种实用的方法:

方法一:用build回调动态生成菜单(推荐)

这个方法会在每次右键点击元素时触发,能让你完全根据当前点击的元素定制菜单内容,非常灵活。

先看你的HTML结构:

<div id="1" class="with-cool-menu">元素1</div>
<div id="2" class="with-cool-menu">元素2</div>

然后是插件配置代码:

$.contextMenu({
    selector: '.with-cool-menu', // 匹配所有目标元素
    build: function($trigger, e) {
        // $trigger就是当前被右键点击的元素,直接获取它的属性
        const elementId = $trigger.attr('id');
        // 自定义数据可以是任意内容,比如基于元素ID生成的信息
        const customElementData = `专属数据:元素ID-${elementId}`;
        
        // 返回定制后的菜单配置,把自定义数据融入菜单项
        return {
            items: {
                view: {
                    name: '查看详情',
                    callback: function(key, options) {
                        // 在这里可以使用自定义数据和点击元素信息
                        console.log(`点击了「${key}」,${customElementData}`);
                    }
                },
                edit: {
                    name: `编辑元素${elementId}`,
                    callback: function() {
                        alert(`开始编辑元素${elementId}!`);
                    }
                },
                // 甚至可以直接把自定义数据做成一个菜单项展示
                info: {
                    name: customElementData,
                    disabled: true // 设置为不可点击的信息项
                }
            }
        };
    }
});

方法二:用全局callback统一处理菜单点击

如果你的菜单项结构是固定的,只是需要在点击时获取当前元素的自定义数据,用全局callback更简单:

$.contextMenu({
    selector: '.with-cool-menu',
    items: {
        view: {name: '查看详情'},
        edit: {name: '编辑'}
    },
    callback: function(key, options) {
        // $(this)就是当前被点击的元素,直接提取属性生成自定义数据
        const $clickedElem = $(this);
        const elemId = $clickedElem.attr('id');
        const customData = `点击了「${key}」,目标元素ID:${elemId}`;
        
        window.console && console.log(customData) || alert(customData);
    }
});

两种方法各有优势:build适合需要根据元素属性动态调整菜单项(比如某些元素显示特定菜单)的场景;全局callback适合菜单项固定,只需要在点击时获取元素信息的情况。

这样不管你点击哪个带with-cool-menu类的div,菜单都能带上对应元素的自定义数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:27:48