jQuery和选择器:我如何确保确实存在我正在寻找的元素?

时间:2016-03-10 15:51:07

标签: javascript jquery knockout.js

我没有经验丰富的JavaScript开发人员(虽然我对Ruby非常了解),到目前为止,当我不得不实现一些JS系列时,似乎可以使用jQuery和hack together。 / p>

据我了解jQuery,它并不假设HTML元素真的存在,但它只是执行查询,如果匹配元素(或许多),有些东西是用它完成的。这适用于通用代码,它可能希望将某些操作应用于页面上的某些元素(可能存在或不存在),但是当涉及到特定逻辑时,它就是一个问题。

这是什么意思?让我举个例子。

假设我有一个单一页面,其中包含一个HTML元素(ID为'#my_element')。对于这个页面,我必须运行一些JS代码,并且我必须确保它找到了这个元素,然后根据需要完成它。

使用jQuery执行此操作,我只需执行$('#my_element').addTooltip()之类的操作,这看起来很好:当我将鼠标悬停在元素上时,会显示工具提示。

让我们假设几个月后我已经完全忘记了这个JS脚本,并且我将元素的ID更改为其他内容。怎么了?没有。我不会注意到工具提示丢失的问题,直到偶然发现它为止。

所以我想知道如何确保我的JS真正应用,这意味着:找到所需的元素,完成它们的工作等等。

jQuery的理念是"错误"这个工具?我需要另一个框架吗?也许更复杂的模式,例如像MVC这样的东西?我以前玩过KnockoutJS,看起来这可能更好,因为它使用data-bind属性直接绑定到元素,因此它比jQuery更适合代码。

2 个答案:

答案 0 :(得分:0)

提到的注释总是在对返回的结果执行操作之前检查.length属性(这可能是最好的答案),但是在实际语法错误的情况下,您的语句“没有任何反应”#34 ;并非总是如此。

如果您在其他浏览器(firebug等)中使用Chrome开发者工具或类似工具,您应该会在"控制台"

中看到错误

您还可以打开javascript调试以获取更多信息。当你打电话给" addTooltip()"对于null(jQuery集合),你会在控制台中看到一个错误,并且可能在调试器中出现异常。

这是在客户端javascript中查找错误的最简单方法之一。

答案 1 :(得分:0)

您可以添加一个特定的插件来验证是否存在非零长度的集合,并在链中使用它:

(function ($) {
  $.fn.verify = function() {
    if (this.length) {
      return this;
    }
    else {
      console.log("No elements found with supplied selector.")
    }
  }
})(jQuery);

$("#myElement").verify().addTooltip();

当然,这确实依赖于手动应用的verify()插件,据我所知,没有内置于jQuery的错误报告来自动启用无效选择器的记录或报告选择器返回零元素。