He leído jquery documentation of plugin authoring y estoy familiarizado con eso. Sin embargo, los ejemplos proporcionados siempre operan en un conjunto de elementos previamente coincidentes. Quiero crear una función que puede hacer ambas cosas:Cómo hacer que una función del complemento jQuery se pueda llamar para uso independiente, que no funcione en una colección
// example usage of my to-be-created plugin function
// this is the way described in the docs, and I know how to do that
$("a").myFunction()
// but I also want to be able to call the function without a collection:
$.myFunction();
Si $.myFunction()
se llama sin una colección de operar en, crearía su propia colección de cuáles son los elementos para que coincida - tipo de un proceso de inicialización (pero no necesariamente correr solo una vez). Además, $.myFunction()
debe mantener la capacidad de ocultación.
El pseudocódigo de lo que quiero lograr:
// [...]
function myFunction(): {
if (notCalledOnACollection) {
// this should run when called via $.myFunction()
$elements = $("a.myClass");
}
else {
$elements = $(this);
}
return $elements.each (function() {
// do sth. here
});
}
Realmente me gustaría mantener todas las funciones de aplicación/funcionalidad dentro de una única definición de la función, y no tener dos funciones llamadas por separado o dos por igual nombre funciones en dos lugares separados dentro del objeto jQuery.
Y por supuesto que podría añadir un parámetro myFunction (do_init)
que indica qué rama de la declaración if
para ejecutar, pero eso sería el desorden de mi lista de argumentos (Quiero utilizar este enfoque para múltiples plugins, y no habrá argumentes a myFunction()
que Simplemente lo dejé aquí por simplicidad).
¿Alguna buena sugerencia?
tengo serios problemas con su solución. He replicado su enfoque en jsfiddle: http://jsfiddle.net/pnpbU/ Pero una vez que ejecuto '$ .myPlugin()', todos los navegadores probados consumen 100% de CPU y se quedan atascados (probados con FF en Linux y Windows , Safari en Mac). – Dyna
No veo ese problema en mi máquina. Y estoy en un dinosaurio en este momento. Y además, jsfiddle no debe usarse para pruebas de rendimiento, tienen un montón de extras cargados. También probé a nivel local y tampoco vi el problema allí. Realmente dudo que tu visión tenga algo que ver con este código. – Donamite
¿Descomentó la línea en la parte js de jsfiddle? De lo contrario, no se ejecutará! Actualmente estoy en la universidad y tengo acceso a un montón de computadoras y puedo reproducir el consumo de 100% de la CPU en 3 máquinas físicamente diferentes. Usar http://jsfiddle.net/pnpbU (sin comentar la última línea) y presionar ejecutar bloqueará/terminará el script en Fedora 17: Firefox 14.0.1, Chrome 22; Windows 7: Firefox 14, IE9; OS X Lion: Safari 5, Firefox 14. Por lo tanto, es * definitivamente * reproducible. Esto no tiene nada que ver con jsfiddle, copiar esa secuencia de comandos junto con jQuery 1.8.0 y ejecutar muestra el mismo efecto. – Dyna