Je viens de commencer à utiliser JQuery et je profite vraiment d'utiliser des sélecteurs. Il me semble que l'idiome serait une très bonne façon de traverser des arbres d'objets (par exemple, des résultats de la requête JSON). Par exemple, si j'ai un objet comme celui-ci:
var obj = { 'foo': 1, 'bar': 2, 'child': { 'baz': [3, 4, 5] } };
4 Réponses :
L'objet Array a des méthodes que vous pouvez utiliser:
first = obj.child.baz.slice(0,1)[0]; allExceptFirst = obj.child.baz.slice(1); allExceptLast = obj.child.baz.(0,-1);
Merci. Oui, c'est à peu près ce que je fais maintenant. Mais les sélecteurs sont beaucoup plus puissants à mon avis, car vous n'avez pas besoin de connaître la forme exacte de l'objet particulier que vous marchez pour trouver des éléments intéressants. Je pense qu'il y a une bonne raison JQuery ne vous fait pas faire HTML.body.Table [1] .TR ...
Eh bien, je dirais personnellement que l'accès de l'objet pur a l'air mieux que les requêtes de type JQuery. Une chose qui serait soignée serait tranchée et d'autres techniques de filtrage.
Si vous vouliez vraiment jouer avec des requêtes d'accès à l'objet, vous seriez certaines possibilités (pensez XPath): P>
var obj = { foo: 1, bar: 2, child: { foo: { baz: [3, {a: 1}, {a: 2, b: 3}]}, bar: { baz: [42, {a: 123}, {a: -1}]}, baz: null}}; // Implicitly start in the Global object, unless a context is provided. // Keys in JavaScript objects are essentially stored in order (not valid for // *all* flavors, but it's close to standard. So you could do slicing on keys.) // Selects (does not return them) // obj.child.foo.baz[1].a // obj.child.foo.baz[2].a // obj.child.bar.baz[1].a // obj.child.bar.baz[2].a // Then performs an aggregate that returns value 125. $('obj.child[:2].baz[1:].a').sum() // Selects obj.foo, obj.bar, obj.child.foo.baz[0] and obj.child.bar.baz[0] $('obj *[typeof(number)]') // Selects obj.foo and obj.child.foo $('obj foo') // Other possible methods: delete(), set(), get() (as an array of values), // min(), max(), avg(), merge() etc etc.
Voici une implémentation de la preuve de concept pour que JQuery se travaille sur des objets. Via un wrapper d'objet ( et l'utilisation serait être: p> donnant la sortie: p> bien sûr, vous devez mettre en œuvre beaucoup plus que le Vous avez ci-dessus pour supporter plus de sélecteurs complexes. P> BTW, avez-vous vu JLLOQ ? p> p> fabenode code>), vous pouvez tromper JQuery à l'aide de son moteur de sélecteur intégré (grésillement) sur des objets javascript simples:
C'est une réponse très intéressante.
Le moyen le plus simple et le plus simple consiste à envelopper l'élément avec jQuery puis boucle par chaque
Y a-t-il une raison pour que vous n'aimez pas obj.child.baz [obj.child.baz.length-1]; ?
Cela fonctionnerait pour cet exemple de jouet, mais se décompose rapidement pour des arbres plus profonds et des objets plus importants. Par exemple, je travaille sur un programme qui utilise un arbre représentant des paquets réseau, et j'aimerais pouvoir simplement écrire $ ('ICMP [code = inaccessible]', la liste de paquets) pour obtenir les cadres ICMP pour des paquets inaccessibles.