Red de conocimiento informático - Material del sitio web - Cómo entender y simplificar la función más cercana de jQuery

Cómo entender y simplificar la función más cercana de jQuery

En la implementación del método delegado, existe una función auxiliar muy importante llamada más cercana, aunque ahora se clasifica como un módulo de nodo transversal. La implementación de esta función es muy complicada, cerca de 50 líneas, y no cumple en absoluto con las reglas de la programación extrema.

Lo último:? función(?selector?contexto?)?{var? ¿retirado? =?[],?Yo,? yo,? ¿canalla? =?este[0];? //Arrayif? (?jQuery.isArray(?Selector?)?)?{// ¿La lógica de filtrado de esta rama es básicamente la misma que la de la siguiente var? fósforo,? ¿Selector, coincide? =?{}, nivel? =?1;? ¿si? (?cur?&&?selector.length?)?{para? (?i?=?0,?l?=?selector.length;?i?<?l;?i++?)?{selector? =?Selector[I];? ¿si? (?!partido[?selector?]?)?{partido[? ¿Selector? ]?=?prueba de posición(?selector?)jQuery(?selector,?context?||?este.fondo?)?:selector;}}?cuándo? (?cur?& amp& amp?cur.ownerDocument?& amp& amp?cur?!==?context?)?{para? (?selector?en?partido?)?{partido? =?coincidencia[? ¿Selector? ];//Creo que es ineficaz crear nuevos objetos jQuery con frecuencia y utilizar métodos tan complejos. ¿si? (?match.jquery?match.index(?cur?)?& gt?-1?:?jQuery(?cur?).is(?match?)?)?{ret.push({?selector:? selector ,?elem:?nivel?});}}?cur? =?cur.parentNodelevel++;}}?Regresión? ret}?//?Stringvar? pos? =?prueba de posición(?selector?)?||?¿qué tipo? ¿Selector? ! ==?"cadena"jQuery(?selector?context?||?este.fondo?)?:0;? ¿para qué? (?i?=?0,?l?=?this.length;?i?<?l;?i++?)?{cur? =?Este [yo];? ¿cuando? (?cur?)?{si? (?pos? índice de posición (actual)?>?-1?:?jquery . find .matchselector(cur, selector)?)?{ret.push(?cur?); }?¿De lo contrario? {¿canalla? =?cur.parentNodeif? (?!cur?||?!cur.ownerDocument?||?cur?===?context?||?cur.nodeType?===?11?)?{ break}}}}?ret? =?ret .longitud? >? 1?jQuery.unique(?ret?)?:?ret? ¿devolver? this.pushStack(?ret,?"reciente",?selector?);},