[jQuery] Methode has funktioniert nicht korregt

Parantatatam

mag Cookies & Kekse
Hallo Tutorianer,

ich bin gerade dabei, mein aktuelles Javascript-Skript mit den Möglichkeiten von jQuery auszubessern, und bin dabei auf folgendes Problem gestoßen: ich möchte ermitteln, ob ein Element oder eines seiner Elternelemente das Attribut contextmenu hat. Je nachdem soll er mir das Element zurück liefern, das am nächsten am aktuellen liegt. Das aktuelle Element ist dabei jenes, auf das ein Klick-Ereignis ausgeführt wurde. Das geht auch, aber jQuery verwirrt mich etwas:
HTML:
<body contextmenu="menu-desktop">
  <div style="width:500px;height:500px" contextmenu="menu-desktop2">
    <div style="width:250px;height:250px" contextmeneu="menu-desktop3"></div>
  </div>
</body>
Code:
$(document).ready(function () {
  $(document).contextmenu(function (event) {
    // innere DIV-Box
    var element = $(event.srcElement);
    // liefert mir nur das BODY-Element sowie die äußere DIV-Box
    console.log(element.parents('[contextmenu]').andSelf().has('[contextmenu]'));
    // liefert mir alle drei Elemente
    console.log(element.parents('[contextmenu]').andSelf());
    // liefert mir den Wahrheitswert true
    console.log(element.is('[contextmenu]'));
  });
});
Wo könnte der (Denk)-Fehler liegen?
 
hy,

Versuchs doch mal mit ner Funktion die dir den ".parent()" vom aktuellen Element zurückgibt, also rekursiv, dann nach dem ".attr('contextmenu')" abzufragen.

HTML:
function isParentContextmenu (obj){
if(obj.attr('contextmenu'))
return true;
else
isParentContextmenu(obj.parent());
}

;)

Gruß, MarcelD
 
Mh, also ich habe – wie erwähnt – schon eine Lösung, nur würde ich gerne verstehen, warum die Variante oben, die eigentlich funktionieren müsste, nicht so funktioniert, wie sie eben funktionieren sollte. Außerdem ist Rekursion unschön. Meine bisherige Lösung sieht so aus:
Code:
if(element.is('[contextmenu]')) {
  element = $('#' + element.attr('contextmenu'));
} else if(element.parents('[contextmenu]').is('[contextmenu]')) {
  element = $('#' + element.parents('[contextmenu]').attr('contextmenu'));
} else {
  return false;
}
Und so wäre meine gewünschte Form:
Code:
element = $('#' + element.parents('[contextmenu]').andSelf().has('[contextmenu]').last().attr('contextmenu'));
 
Ach herje, ich seh' schon den neuen Kinofilm vor mir: Männer die auf Codezeilen starren. Ich danke euch beiden und nochmals für die zusätzlichen Informationen.
 

Neue Beiträge

Zurück