技术开发 频道

Jquery技巧讲解:简化closest函数

  【IT168 技术】在实现delegate方法中,有一个很重要的辅助函数叫closest,虽然现在它归类为遍历节点这个模块中。这个函数实现得非常复杂,洋洋洒洒近50行,完全不符合极限编程的规矩。

closest: function( selectors, context ) {

  var ret
= [], i, l, cur = this[0];

  
// Array

  
if ( jQuery.isArray( selectors ) ) {//这分支的过滤逻辑基本与下面的一致

  var match, selector,

  matches
= {},

  level
= 1;

  
if ( cur && selectors.length ) {

  
for ( i = 0, l = selectors.length; i < l; i++ ) {

  selector
= selectors[i];

  
if ( !matches[ selector ] ) {

  matches[ selector ]
= POS.test( selector ) ?

  jQuery( selector, context || this.context ) :

  selector;

  }

  }

  
while ( cur && cur.ownerDocument && cur !== context ) {

  
for ( selector in matches ) {

  match
= matches[ selector ];//这里频繁创建新的jQuery对象与使用is这样复杂的方法,我不觉得其高效到哪里去

  
if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {

  ret.push({ selector: selector, elem: cur, level: level });

  }

  }

  cur
= cur.parentNode;

  level
++;

  }

  }

  return ret;

  }

  
// String

  var pos
= POS.test( selectors ) || typeof selectors !== "string" ?
0
相关文章