2011-11-16 102 views
1

我遇到了无法删除在我的扩展程序中动态创建的菜单的问题。我可以通过document.getElementById获得菜单对象,或者使用像我这样的jQuery的东西。基本上,用户点击'删除'菜单项,它应该删除父菜单(有2个父母,因为它去菜单>弹出> menuitem(点击))。动态删除XUL菜单

警报吐出适当的id为我想要删除。 removeObj.remove();崩溃扩展名。最后一行似乎没有任何作用(除非再次点击删除它不再能找到id),但它仍然可以在用户界面中看到。

代码:

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

这不是因为jQuery的。我写了这一点,它完全禁用执行后的右键菜单(但如果情况返回正确的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); 
        } 
       } 
+0

它看起来像你正在使用jQuery代码,但浏览器代码中不存在jQuery,那么为什么你使用jQuery代码? – erikvold

+0

你可以在你的代码中包含jquery以便能够使用它。即使我不使用它,它也不起作用。恩。 var mainMenu = document.getElementById('mainmenu'); mainMenu.removeChild(的document.getElementById( 'clickeditem')); – leshow

+0

呵呵?你使用jQuery吗? – erikvold

回答

0

务必:

​​
+0

这使我的右键菜单崩溃,就像我添加到原始问题中的第二位代码一样。我不确定为什么会发生这种情况。我做的for循环显示我有正确的根元素,而我试图删除的元素是这个子元素,但是当我去实际删除它时,没有任何工作。 – leshow

+0

fyi我的扩展程序的菜单是右键菜单的子菜单 – leshow

+0

请发送您的扩展代码请 – erikvold