Contestaré esta pregunta al revés.
¿Qué significa
? $(a, b)
Este es un selector jQuery normal, pero con un contexto aplicado.
- ¿Qué es bootstrap y su uso?
- ¿Cuál es la pila de tecnología de Lever?
- ¿Necesitamos saber SQL o SQLite para aprender Flask?
- ¿Cuál es el mejor complemento de WordPress que administra usuarios y facturas?
- Como desarrollador junior, ¿cómo obtengo tanto respeto como el desarrollador senior de la alta gerencia?
Aquí están los documentos: http://api.jquery.com/jquery/#jQ…
Cuando proporciona un segundo argumento para la función jQuery, está seleccionando el primer argumento, pero solo si es secundario al segundo (también conocido como el contexto). Por ejemplo, si desea seleccionar todos los elementos
- puede hacer algo como:
1. var listItems = $('li', '#list');
Básicamente es algo así como llamar:
2. $('#list').find('li');
O:
3. $('#list > li');
La diferencia entre 2. y 3. es que en 3 no puede usar un objeto jQuery previamente seleccionado para el selector ‘#list’. Lo bueno de proporcionar contexto al selector jQuery es que acepta un selector de cadena, un objeto DOM o un objeto jQuery. Por lo tanto, puede encontrar fácilmente elementos secundarios de un elemento sin importar en qué forma tenga el elemento.
Si tiene un objeto DOM, debe convertirlo en un objeto jQuery para usar .find () :
$('someStringSelector', domObject); // this will work domObject.find('someStringSelector'); // this won't // you will have to convert the DOM object to a jQuery object $(domObject).find('someStringSelector');
Por lo tanto, es más fácil, más rápido y mejor en muchos casos.
¿Qué es ‘ esto ‘ en las funciones de devolución de llamada de eventos jQuery?
Cuando vincula un evento a un objeto jQuery, debe asignarle una función de devolución de llamada. jQuery se registra en ese evento y activa la función de devolución de llamada proporcionada.
Cuando vincula un evento DOM a un objeto DOM, jQuery proporciona un contexto a la función de devolución de llamada. El contexto apunta al elemento en el que se disparó el evento. Más sobre eso a continuación.
El método .hover () es un poco diferente. Se suscribe a los eventos mouseenter y mouseleave y le da dos funciones de devolución de llamada. jQuery llama al primero cuando el elemento está suspendido y al segundo cuando el elemento está desactivado.
Ahora, el contexto de la función. Lo que quiero decir con contexto de función es en realidad el objeto al que ‘esto’ apunta. Este es el objeto sobre el cual se aplica la función y tiene acceso a ella.
Este no es un truco especial de jQuery. Está horneado en Javascript durante mucho tiempo, pero pocas personas realmente lo hacen.
Cuando jQuery se suscribe a un evento DOM, en realidad está usando cosas nativas de JavaScript como addEventListener y métodos similares de JavaScript. Pero este método solo toma un elemento DOM a la vez. Entonces, cuando haya seleccionado todos los elementos en una página y les asocie un evento de clic, jQuery agregará suscriptores individuales a cada uno. Cuando se activa el evento DOM, devuelve un objeto de evento que contiene toda la información sobre el evento de clic.
jQuery lee este objeto de evento, obtiene el elemento DOM real en el que se activó el evento y lo asigna como contexto a la función de devolución de llamada cuando activa la función.
Así es como sucede esto:
function someCallback ( arg1, arg2 ) { console.log(this); console.log(arg1); console.log(arg2); } someCallback.call({ property1: 'someAwesomeValue' }, 'arg1', 'arg2');
La magia aquí se llama .call () . Este es un método nativo de JavaScript. Todas las funciones en JavaScript tienen una llamada y un método de aplicación. La diferencia entre ellos es que la llamada toma tantos parámetros como desee y los pasa a la función en la que opera, pero aplicar solo toma un segundo argumento con una serie de argumentos para pasar.
La característica clave de ambos es que llaman a la función y cambian el contexto en el que opera la función (también conocido como esto). Si este script está en el ámbito global y lo llama regularmente, esto en la función apuntará al objeto global (ventana si está en un entorno de navegador).
El primer parámetro que pasa para llamar o aplicar es el mismo que este en la función.
Aquí hay algunos buenos artículos sobre solicitud y solicitud :
- http://devlicio.us/blogs/sergio_…
- https://developer.mozilla.org/en…
- https://developer.mozilla.org/en…
Entonces, en su código de ejemplo, están sucediendo algunas cosas:
- Cuando el objeto está suspendido o no, jQuery llama a la función de devolución de llamada.
- Cuando llama a la función de devolución de llamada, jQuery cambia el contexto para que sea el elemento DOM en el que estaba suspendido.
- Entonces esto en la función de devolución de llamada es un elemento DOM.
- Pero como ya hemos aprendido del argumento de contexto en la función jQuery, el contexto para un selector acepta elementos DOM.
- Entonces
almacena todos los elementosvar ul = $("ul", this);
- que son elementos secundarios del elemento
- suspendido en la variable ul.
Algunos otros puntos clave sobre el código:
- Como puede ver, la función de alternar devuelve una función. Y cuando llama al método de desplazamiento, en realidad no le está dando a jQuery la función de alternar como devolución de llamada, está dando la función devuelta como una devolución de llamada. Entonces, en lugar de escribir dos funciones muy similares para las dos devoluciones de llamada, el autor del script utilizó una función que crea fácilmente las devoluciones de llamada deseadas.
- Preguntó qué significa esto en la función de alternar. Pero en realidad el verdadero problema aquí es lo que esto significa en la función devuelta, que es la devolución de llamada real. Y como se describió anteriormente, jQuery establece el contexto de la devolución de llamada para que sea el elemento DOM. Y jQuery ni siquiera ahora habla de la existencia de la función de alternar. Lo único que le importa son las dos funciones anónimas proporcionadas como devoluciones de llamada, que se devuelven de alternar.