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

qin*_*ang 5 jquery

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

// selector is an object
function(selector) {

  selector.trigger('eventHere');
}
Run Code Online (Sandbox Code Playgroud)

显然,event如果selector传入的内容没有,那么它永远不会触发event,但是在触发事件之前我应该​​做一些条件检查吗?我的意思是:

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

或者只是离开它......?

no.*_*ing 5

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

// 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');
}
Run Code Online (Sandbox Code Playgroud)

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

编辑

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

还有一个jsperf测试表明,每种技术的操作/秒都有明显的差异(这不是时间!最初让我失望) - 在调用函数与简单调用之前检查null/ 0-length jQuery对象功能.


Tim*_*ote 5

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

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

如果元素没有触发这样的事件,但是你尝试触发它,则不会发生任何事情,也不会再抛出异常; 无需检查.

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

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

myTriggerFunction('.WeWillBeTriggered');
Run Code Online (Sandbox Code Playgroud)