最近使用了一些代码

$("#divMenuContainer:visible").hide("explode");

然而,经过一段时间的try ,我意识到我的 Select 器引用的是一个不存在的div.

查询的结果只是它没有执行.

很明显,这是设计出来的,有没有人能解释一下为什么做出这样的设计 Select 而不是提出某种例外的逻辑呢?

Not trying to criticise just trying to understand.

推荐答案

这里有几个很好的理由,"可链接性"是主要驱动力,通过链接编写非常简洁代码的能力必须不会抛出错误才能正常工作,例如:

$("#divMenuContainer:visible").hide("explode").add("#another").fadeIn();

Each object in the chain, even if it references no DOM elements may have more added later, or let's take another example:

$("#divMenuContainer:visible").live("click", function() { ... });

在这种情况下,我们不关心 Select 器找到的任何元素,而是关心 Select 器本身.还有一个:

$("#divMenuContainer:visible").find(".child").hide("explode").end().fadeOut();

Even if there are no children, we may want to hop back in the chain afterwards, continuing to use the .prevObject reference to go back up the chain.

有几十个这样的不同 case 显示了图书馆的优势.至于why人,来自对John Resig人的采访,他是jQuery的创建者,他说这就是它的工作原理.他追求的是尽可能简洁的代码,而链接模型就是从帽子里出来的,它恰好也有很多好处,上面的例子只是其中的几个.

To be clear, I'm not saying every attribute of chaining is a good one, there are just many upsides to it.


让我们以这一页为例,如果我们有这样的东西:

$(".comment").click(replyToFunction);

因为还没有任何 comments 而失败的Should个吗?不,不是真的,这是意料之中的,我不希望这里出现错误…如果元素存在,就go 做,如果不存在,我的观点是,至少在我的经验中,not因为缺少一个元素而抛出一个错误比抛出一个要有用得多.

The selector in your question, the #IDselector is a very special case where you expect only a single element, so maybe you could argue it should fail there...but then that wouldn't be consistent with other selectors, and you want a library to be consistent.

With pretty much any other selector you expect 0-many elements, so failing when you don't find any elements would be significantly less desirable in most situations, even more so in the cases like .live() above.

Jquery相关问答推荐

jQuery 时间 Select 器

jQuery在点击函数后获取
  • 元素的id/value
  • 如何使用 jQuery 获取所有 ID?

    jQuery 滚动到 Div

    如何在使用 jQuery 单击特定链接时打开 bootstrap 导航选项卡的特定选项卡?

    Ajax 更新后在 jQuery 中重新绑定事件(更新面板)

    lodash debounce 在匿名函数中不起作用

    使html文本输入字段随着我输入而增长?

    判断元素是否为 div

    Jquery .show() 不显示隐藏可见性的 div

    如何使用 jquery 动态更改 iframe 中的内容?

    如何签入用户已在 Google recaptcha 中选中复选框的 js?

    $(document).ready(function(){});页面底部的 vs 脚本

    禁用 jquery Select 的下拉菜单

    变量首字母大写

    如何使用 jQuery 取消设置元素的 CSS 属性?

    使用 JQuery 的黄色淡入淡出效果

    你如何记录jQuery中一个元素触发的所有事件?

    如何获取第一个元素而不是在 jQuery 中使用 [0]?

    如何删除集中的 contenteditable pre 周围的边框?