Probablemente tenga 7 u 8 en competencia con jQuery (en una escala de 1-10), por lo que no estoy seguro si esto incluso tiene sentido, pero me gustaría saber si alguien sabe de una función jQuery o posiblemente un complemento que permite que una rama de jQuery solo se ejecute si una condición dada es verdadera. De lo contrario, me gustaría saber si alguien piensa que el concepto es defectuoso de alguna manera (EDITAR y cómo es defectuoso)¿Hay alguna manera de realizar una derivación de jQuery encadenando solo si una condición es verdadera?
Si bien se podría controlar la unión de varios eventos usando la sintaxis de JavaScript normal, similar a esto:
var desiredElement = $('.parent') // find the parent element
.hover(overFunction,offFunction) // attach an event while I've got the parent in 'scope'
.find('.child-element'); // then find and return the child
if (booleanVar1) { // if one condition
desiredElement.click(clickFunction1); // attach one event
} else if (booleanVar2) { // or if a different condition
desiredElement.click(clickFunction2); // attach a different event
} else { // otherwise
desiredElement.click(clickFunction3); // attach a default event
}
$('.parent').find('.other-child') // (or $('.parent .other-child')
.css(SomePredefinedCssMapping)
.hide()
//...
me preguntaba si hay una manera de hacerlo todo en jQuery o si hay una buena razón para no ... quizás algo como esto:
$('.parent') // find the parent element
.hover({overFunction,offFunction}) // attach an event while I've got the parent in 'scope'
.find('.child-element') // then find the child
.when(booleanVar1) // if one condition
.click(clickFunction1) // attach one event
.orWhen(booleanVar2) // or if a different condition
.click(clickFunction2) // attach a different event
.orElse() // otherwise
.click(clickFunction3) // attach a default event
.end()
.end()
.find('.other-child')
.css(SomePredefinedCssMapping)
//...
Nota: Creo que esto es sintácticamente correcta, asumiendo los valores booleanos y funciones se definen adecuadamente, pero estoy bastante seguro de que he recibido en toda la intención bastante clara
el jQuery propuesta parece un poco más ordenado a mí (??) ¿de acuerdo en desacuerdo? - entonces aquí están mis preguntas:
- ¿Hay alguna parte de jQuery nativo que básicamente ya lo haga?
- ¿Ya hay una extensión que permite este tipo de cosas?
- ¿Es más difícil de hacer de lo que estoy pensando? (Creo que algo así como mantener el elemento actual establecido si la condición es verdadera, presionar un elemento vacío establecido si la condición es falsa, y luego hacer estallar el conjunto de elementos para cada condición
or
lo haría, al igual que el métodoend()
aparece de nuevo el conjunto anterior después de una llamada afind()
) - ¿Hay algo que lo haga significativamente menos eficiente?
EDITAR
La pregunta es cómo hacer esto con el encadenamiento de método o por qué sería desaconsejable (detalles prefiere). Si bien no solicita alternativas, tales alternativas pueden ser necesarias para explicar los problemas con un enfoque de encadenamiento jQuery. Además, dado que el ejemplo anterior evalúa inmediatamente los booleanos, cualquier otra solución debería hacer lo mismo.
Definitivamente, hay un plugin para que en alguna parte, lo he visto escrito como respuesta en los foros antes de jQuery. Aunque no estoy de acuerdo con este tipo de sintaxis, está agregando más llamadas de función para algo que no necesariamente hace que la codificación sea más fácil. –
esto es simplemente horrible –
mientras aprecio los comentarios de TODOS (especialmente @ tereško - aunque no estoy seguro de estar de acuerdo), todavía no estoy viendo una respuesta real a ninguna de mis preguntas, así que voy a aguantar un rato más tiempo –