elem", context) selector will be deprecated in a future release. Ik gebruik dit patroon de hele tijd, meestal als"> elem", context) selector will be deprecated in a future release. Ik gebruik dit patroon de hele tijd, meestal als"> elem", context) selector will be deprecated in a future release. Ik gebruik dit patroon de hele tijd, meestal als" />

Wat is de nieuwe juiste manier om een ​​kindselector met een contextknoop in jQuery te gebruiken?

In de jQuery-documentatie voor de onderliggende selector zag ik deze opmerking:

Note: The $("> elem", context) selector will be deprecated in a future release. Its usage is thus discouraged in lieu of using alternative selectors.

Ik gebruik dit patroon de hele tijd, meestal als volgt:

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

Ik begrijp echter niet wat de "alternatieve selectors" waar ze naar verwijzen zouden kunnen zijn. Wat is de juiste manier om een ​​selector te schrijven die de directe onderliggende elementen van een contextknoop doorloopt? Kan iemand als bonus uitleggen waarom dit wordt afgeschreven? Alle alternatieven die iedereen geeft, lijken verbazingwekkend lelijk .

Hier zijn enkele dingen die niet werken:

// 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');
11
Je brengt zeker een goed punt naar voren. Maar, tenzij je iets ontdekt waar ik me op dit moment niet van bewust ben, denk ik dat het koppelen van kinderen aanroepen en het splitsen van de selector waarschijnlijk de enige optie is.
toegevoegd de auteur Dan, de bron
Wacht, ze hebben zeker niet het gebruik van een eerste '>' beëindigd. Zoals ik in mijn antwoord zei: ze hebben zojuist het gebruik van de komma beëindigd, gevolgd door de contextselector. Dus deze jsfiddle.net/DwUTw blijft prima. Ik denk dat we allemaal een beetje in de war zijn geraakt.
toegevoegd de auteur Dan, de bron
De contextparameter die wordt beëindigd, is zeker de manier waarop ik dat waarschuwingsbericht interpreteer. Omdat het een plan is voor toekomstige afkeuring, misschien is dat waarom het nog niet in de documentatie staat.
toegevoegd de auteur Dan, de bron
Ach, ik heb die vraag niet gezien, zelfs niet na ijverig zoeken. Geen van de antwoorden is echter echt heel bevredigend.
toegevoegd de auteur Francis Avila, de bron
Dat is verschrikkelijk. Weet iemand de reden achter het depreciëren van het gebruik van een eerste '>'? Ik wil misschien het gevecht met jQuery aangaan.
toegevoegd de auteur Francis Avila, de bron
Werkelijk? Geen enkele andere documentatiepagina van de selector heeft deze waardeverminderingwaarschuwing, en de jQuery Core-documentatie maakt geen melding van de context parameter wordt afgeschreven. Misschien begrijp ik de waardevermindering niet eens!
toegevoegd de auteur Francis Avila, de bron
toegevoegd de auteur Jonathan Rich, de bron

1 antwoord

De reden dat ze zeggen:

Note: The $("> elem", context) selectof will be deprecated in a future release. Its usage is thus discouraged in lieu of using alternative selectofs.

Is due to the comma followed by the context in the selectof. E.g. $("> elem") is fine however, $("> elem", context) will be deprecated.

$("> elem", context) is the same as $(context + "> elem").

Een cofrecte manier om kinderen en kleinkinderen te krijgen is

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

of

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

of

context.find('> .child > .grandchild');
14
toegevoegd
Er is niets mis met de voorgestelde alternatieven, maar ik moet reageren op de gegeven redenering. Het hele punt van > elem is dat het een soort context veronderstelt. $ ("> elem") zou niet goed zijn, in feite zou het zinloos zijn, want wat houdt er precies verband met elem ? En $ (context + "> elem") zou alleen werken als context een selector string was.
toegevoegd de auteur BoltClock, de bron
Eigenlijk ben ik er niet helemaal zeker van of ze echt bedoeld zijn om te zeggen dat het gebruik van een contextargument met een relatieve selector is gedeprecieerd, of dat de relatieve selectorsyntaxis zelf is verouderd. Om het nog erger te maken, sinds de documenten van jQuery volledig opnieuw zijn ontworpen, is de melding van afkeuring bijna verdwenen. Ik ben bijna in de verleiding om om deze reden een nieuwe vraag te maken.
toegevoegd de auteur BoltClock, de bron