【问题标题】:How can I stop a JavaScript from executing if an element exists?如果元素存在,如何阻止 JavaScript 执行?
【发布时间】:2012-09-14 14:25:39
【问题描述】:

我有一个 Firefox 插件,它在 sub.example.com 的每个页面上注入/执行一个 jQuery 脚本。由于设计不佳,该脚本无法在网站的一页上运行。如果某个元素位于页面上,有什么方法可以阻止脚本执行?

编辑:我正在使用的脚本必须在 DOM 加载之前执行 。有什么方法可以访问 HTML 文件本身并找出该元素是否存在?

【问题讨论】:

  • 你应该阅读 jquery on api,看看你是否可以在你的页面中使用它..
  • 好的,下面的答案都回答了这个问题,他们只是没有解决我的问题。我设法通过指定 URL 异常找到了解决方法。

标签: javascript jquery html firefox-addon firefox-addon-sdk


【解决方案1】:

由于 jQuery 集合只是增强的数组,它们每个都有一个 length 属性,它告诉你它匹配了多少元素:

jQuery(document).ready(function($)
{
    if ( $('#someElement').length ) return;
    // All of your code should go here...
});

【讨论】:

  • 为了简洁起见,我推荐 if ( $('#someElement')[0] ),因为该表达式的计算结果要么是 DOM 引用,要么是 undefined,这正是必须检查的内容。
  • @ŠimeVidas - 恕我直言.length 更清楚它的作用:它检查集合的长度。不管怎样都很好……
【解决方案2】:

由于您使用的是 jQuery,我假设您的脚本包含在 $(document).ready 回调中,如果是这样的话:

$(document).ready(function() {
    if ($('#breakOnThisElem').length) {
       return;
    }
});

如果您的代码没有包含在这样的函数中:更改它! :)

【讨论】:

  • 请解释一下否决票。我不介意投反对票的人,只要他们解释原因。我可能会学到一两件事
  • OP 明确表示,如果存在该元素,他们不想运行他们的代码(虽然我不是反对者)。
  • 不是我的 DV,但.ready() 对单个元素没有用处。它会工作,但会在 DOM 准备好时运行,就像典型的 ready 调用一样。换句话说,.ready() 会忽略选择器。
  • @JosephSilber:我最初的回答是这样的:它和你的完全一样...第二部分是在DV之后添加的,但是不正确,我会删除它。
  • 你和他在相反的条件下回归。如果您在 if 而不是 return 语句中包含页面代码,那么您的代码是正确的。
猜你喜欢
  • 2022-12-05
  • 2016-06-14
  • 2012-06-22
  • 2011-07-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多