Comment obtenir l’élément précédent le plus proche dans jQuery?

Je souhaite obtenir la balise d’object la plus proche à partir de la balise d’object actuellement sélectionnée. Mais il faut que ce soit ssortingctement au dessus. Supposons que j’ai l’object avec l’identifiant A Comment puis-je obtenir la balise d’object la plus proche au-dessus? Dans ce cas, je veux obtenir la balise object avec id B Chaque conteneur div peut contenir une balise d’object ou autre chose.

 

En supposant que this soit l’object avec l’ID A

 $(this).closest('.message').prevUntil('.message:has(object)').prev().find('object'); 

VIOLON

parcourt jusqu’au .message le plus .message puis vérifie les éléments précédents jusqu’à ce qu’il en trouve un qui contienne une balise d’ object , puis s’arrête, mais s’arrête à l’élément précédant cette balise; nous appelons donc prev pour aller plus loin, puis nous utilisons find pour trouver la balise d’object.

Une autre option:

 var objs=$('object').toArray(); $('.message').on('click',function(){ var elem=$(this).children().get(0); if(objs.indexOf(elem)-1>=0){ console.log(objs[objs.indexOf(elem)-1]); console.log(objs[objs.indexOf(elem)-1].id); } }); 

Vous pouvez utiliser prev () pour obtenir l’élément frère précédent. Cela vous mènera à mi-parcours, mais comme il n’est pas garanti que chaque div ‘message’ contienne un élément d’ object , vous devrez utiliser prevUntil () ou exécuter votre propre itération / recherche.

Par exemple:

 var lastObj = $("#A"); var parent = lastObj.parent(); var previousObject = parent.prevUntil(".message:has(object)").prev().find("object"); 

Ou sans prevUntil() :

 var lastObj = $("#A"); var parent = lastObj.parent(); var previousObject = undefined; while (parent.length > 0 && ! previousObject) { parent = parent.prev(); if (parent.find("object").length > 0) { previousObject = parent.find("object"); } } 

Ou sous forme d’extrait de code exécutable (en utilisant des classes au lieu de balises d’ object ):

 $(".object").click(function(){ var myId = this.id; var prevId = undefined; var parent = $(this).parent(); var previousObject = undefined; while (parent.length > 0 && ! previousObject) { parent = parent.prev(); if (parent.find(".object").length > 0) { previousObject = parent.find(".object"); prevId = previousObject.attr("id"); } } alert("clicked=" + myId + ", previous=" + prevId); }); 
  
C
B
A
Z