2011-12-06 11 views
11

En el jQuery documentation for the child selector vi esta nota:¿Cuál es la nueva forma correcta de utilizar un selector secundario con un nodo de contexto en jQuery?

Nota: El selector $("> elem", context) dejará de estar disponible en una versión futura. Por lo tanto, se desaconseja su uso en lugar de utilizar selectores alternativos.

que utilizan este patrón todo el tiempo, por lo general como esto:

$nodes.find('> children[something=morecomplicated] > somethingelse'); 

Sin embargo, no entiendo lo que los selectores "alternativas" se refieren a que podría ser. ¿Cuál es la forma correcta de escribir un selector que atraviesa los elementos secundarios inmediatos de un nodo de contexto? Como una ventaja, ¿alguien puede explicar por qué esto está depreciado? Todas las alternativas que todos están dando parecen asombrosamente feo.

Aquí hay algunas cosas que No trabajo:

// does not guarantee that '.child' is an immediate child 
$nodes.find('.child > .grandchild'); 

// this will return empty array in recent jQuery 
// and will return full list of children in older jQuery 
$nodes.children('.child > .grandchild'); 

// Anything like this which forces you to split up the selector. 
// This is ugly and inconsistent with usual selector ease-of-use, 
// and is a non-trivial conversion for long or complex selectors. 
$nodes.children('.child').children('.grandchild'); 
// After all, no one would ever recommend 
$nodes.find('.this').children('.that'); 
// instead of 
$nodes.find('.this > .that'); 
+1

Ver aquí para información adicional: http: // stackoverflow. com/questions/7833558/child-selector-deprecated –

+0

Ah, no vi esa pregunta incluso después de una búsqueda diligente. Ninguna de las respuestas es realmente muy satisfactoria, sin embargo. –

+0

Definitivamente planteas un buen punto. Pero, a menos que descubras algo de lo que no estoy al corriente, creo que encadenar llamadas de niños y dividir el selector es probablemente tu única opción. – Dan

Respuesta

14

La razón por la que están diciendo:

Nota: El selector $("> elem", context) dejará de estar disponible en una versión futura. Por lo tanto, se desaconseja su uso en lugar de utilizar selectores alternativos.

Se debe a la coma seguida del contexto en el selector. P.ej. $("> elem") está bien, sin embargo, $("> elem", context) quedará obsoleto.

$("> elem", context) es el mismo que $(context + "> elem").

Una forma correcta de obtener hijos y nietos es

$("elem").children('.child').children('.grandchild'); 

o

context.children('.child').children('.grandchild'); 

o

context.find('> .child > .grandchild'); 
+1

No hay nada malo con las alternativas sugeridas, pero tengo que comentar el razonamiento dado. El objetivo de '> elem' es que asume algún tipo de contexto. '$ ("> elem ")' no estaría bien, de hecho, no tendría sentido, porque ¿con qué exactamente se relaciona el 'elem'? Y '$ (context +"> elem ")' solo funcionaría si 'context' fuera una cadena de selector. – BoltClock

+1

En realidad, no estoy del todo seguro de si realmente querían decir que el uso de un argumento de contexto con un selector relativo está en desuso, o que la sintaxis relativa del selector está en desuso. Para empeorar las cosas, desde que los documentos de jQuery fueron completamente rediseñados, el aviso de obsolescencia casi ha desaparecido. Estoy casi tentado de crear una nueva pregunta por este motivo. – BoltClock

Cuestiones relacionadas