【问题标题】:removing XUL menu dynamically动态删除 XUL 菜单
【发布时间】:2011-11-16 19:01:07
【问题描述】:

我遇到了一个问题,即我无法删除在我的扩展程序中动态创建的菜单。我可以使用document.getElementById 或使用下面的jquery 东西来获取菜单对象。基本上,用户单击“删除”菜单项,它应该删除父菜单(有 2 个父菜单,因为它进入 menu > popup > menuitem (clicked) )。

Alert 为我要删除的内容吐出正确的 idremoveObj.remove(); 使扩展程序崩溃。最后一行似乎没有做任何事情(除非第二次单击删除它不再可以找到 id),但它仍然在 UI 中可见。

代码:

var jObj = $(menuObject);
var removeObj = $(jObj).parent().parent();
var id = removeObj.attr('id');
alert(id);
//removeObj.remove();           
$(removeObj).parent().removeChild(document.getElementById(id));

这不是由于 jquery。我已经写了这个,它在执行后完全禁用了右键菜单(但在 if-case 中返回正确的 id 位置)

                var mainMenu = document.getElementById('rclickMenu_MenuPopupContainer');
                var toRemove = document.getElementById("rclickMenu_"+main);
                for(var i=0; i < mainMenu.children.length; i++){
                    if(mainMenu.children[i].getAttribute('id') == toRemove.getAttribute('id')){
                        alert(toRemove.getAttribute('id'));
                        //mainMenu.removeItemAt(i); 
                        mainMenu.removeChild(toRemove);
                    }
                }

【问题讨论】:

  • 看起来你用的是jQuery代码,但是浏览器代码中不存在jQuery,那你为什么用jQuery代码呢?
  • 您可以在代码中包含 jquery 以便能够使用它。即使我不使用它,它也不起作用。前任。 var mainMenu = document.getElementById('mainmenu'); mainMenu.removeChild(document.getElementById('clickeditem'));
  • 嗯?你在用jQuery吗?
  • 如果你是那么你不应该,这可能就是为什么你的代码 dnw
  • 我正在使用 jquery。但即使我不使用它并像我展示的那样使用 document.getElementById,它也不起作用。换句话说,无论我是否使用 jquery,我都无法删除菜单项。你知道怎么去掉吗?

标签: javascript firefox firefox-addon xul


【解决方案1】:

做:

let (ele = document.getElementById(id)) {
    ele.parentNode.removeChild(ele);
}

【讨论】:

  • 这会使我的右键菜单崩溃,与我添加到原始问题中的第二段代码相同。我不确定为什么会这样。我制作的 for 循环表明我有正确的根元素,而我要删除的元素是它的子元素,但是当我实际删除它时,没有任何效果。
  • 我做了,在问题中,看第二个代码部分。你想看多少?挺长的
猜你喜欢
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 2021-05-22
  • 2014-06-28
相关资源
最近更新 更多