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); });