如果找不到jQuery选择器会发生什么?

如果我将一个selector作为parameter传递给函数。

 // selector is an object function(selector) { selector.trigger('eventHere'); } 

显然,如果传入的selector没有此eventevent将永远不会触发,但是我应该在触发事件之前进行一些条件检查吗? 我的意思是:

 // selector is an object if(selector === 'matched'){ // then fire the event } else{ // do nothing } 

或者只是离开它……?

关于jQuery的好处是,如果选择器不匹配,它不会抛出exception或导致错误。 所以你不需要做任何额外的事情; 这是一个安全的操作:

 // selector **must** be a jQuery object // the assumption here is that you've already done // var selector = $('selectorString'); elsewhere // and have invoked this function with selector function(selector){ selector.trigger('eventHere'); } 

但请注意,您必须确保selector是一个jQuery对象! 否则,您可能会收到错误消息,指示trigger不是函数。

编辑

Adam Terlson在评论中指出“ 如果jquery对象在执行函数之前是否为null或长度为0,则值得测试。仅仅因为它不会抛出错误并不意味着性能不能通过不首先执行它获得(jQuery仍在尝试)。

还有一个jsperf测试表明每种技术的ops / sec都有明显的差异(这不是时间!最初让我失望) – 在调用函数vs.之前检查null / 0 length jQuery对象只需调用该函数。

jQuery总是返回一个元素数组,即使选择器根本没有返回任何元素,它也将包含一个空数组。

您仍然可以在该空数组上执行任何函数,而jQuery不会抛出错误,因此无需检查返回的元素是否存在。

如果元素没有触发这样的事件,但是你试图触发它,那么什么都不会发生,再也不会抛出exception; 无需检查。

另请注意,如果您坚持将选择器传递给对象,则仍需要使用选择器获取对象,然后才能对它们执行任何操作。

 function myTriggerFunction(selector) { var elements = $(selector); elements.trigger('eventHere'); } myTriggerFunction('.WeWillBeTriggered'); 

只是触发事件..

但是选择器变量实际上应该是一个jQuery对象( 使用您使用的语法 )。

如果jQuery对象的创建与任何元素都不匹配,它仍然是一个jQuery对象,但内部没有元素。 您在jQuery对象上执行的大多数方法都可以处理任意数量的元素,包括零,因此如果您只是不想做任何事情,则不必进行任何检查。

只有当你想要在集合为空时要做一些特殊的事情时才需要检查它,并且你通过检查length属性来做到这一点:

 function(selection){ if (selection.length > 0) { selection.trigger('eventHere'); } else { // do something else because the selection was empty } } 

请注意,“selector”是用于指定要放入jQuery对象的元素的字符串,如代码$('#main')的字符串#main ,因此调用jQuery对象“selector”可能会让人困惑。

如果要确保仅针对特定元素类型触发事件,可以在触发事件之前检查该事件。

 if (selector.is("type of element")) { //then fire event } 

或者,如果您想通过标签名称进行检查

 if (selector.get(0).tagName=="tag name") { //then fire event }