禁用除特定#id之外的每个html DOM元素

时间:2015-06-10 17:40:09

标签: jquery html

其实我试图禁用html页面中的所有元素,但是有一些元素我想要活跃。

$('body').find('*').attr('onclick',"return false;"); //Disabling all elements
// Trying to make this id("prerequisitedetails") active.
$("#prerequisitedetails").parents().attr('onclick',null).off('click');

任何人都可以告诉我这样做的正确方法。

1 个答案:

答案 0 :(得分:1)

  

任何人都可以告诉我这样做的正确方法。

请勿使用onclick属性,请使用真实事件处理程序。

这应该这样做:

$('body')
    .find('*')
    .not($("#prerequisitedetails").parents().addBack())
    .click(false);

这是做什么的:

  • 查找body
  • 后代的所有元素
  • 从该集合中删除prerequisitedetails元素或其任何父元素。请注意addBack,因此我们要包含元素本身。
  • 使用jQuery简写为返回false的单击处理程序。

虽然考虑到这一点,但是肯定您是否希望允许点击元素的父级而不是后代?你可能想要:

$('body')
    .find('*')
    .not($("#prerequisitedetails").find("*").addBack())
    .click(false);

就像上面那样,但它“启用”的元素是prerequisitedetails元素及其后代。

但是,这有点蛮力。您可能会查找与模态对话框相关的问题和答案,模式对话框通常使用捕获点击的填充元素,然后使用z-index将要在其上方的元素定位在该元素前面。