2010-12-02 4 views
0

J'ai un événement click et une instruction if dans celui-ci comme indiqué ci-dessous.Jquery - sélection d'un élément et de tout ce qu'il contient

if (!$(e.target).is("textarea.textobject, div.texteditor")) 
{ 
    // do stuff 
} 

Cela fonctionne mais le problème est le div montré ci-dessous. Lorsque je clique sur la portée ou la table à l'intérieur de la div, cela ne fonctionne pas. J'ai essayé (div.texteditor> *) mais cela ne fonctionne pas. Donc, fondamentalement, je veux être en mesure de sélectionner div.texteditor et d'englober tout à l'intérieur. Est-ce que quelqu'un sait une solution à cela? Je suis sûr que je manque quelque chose ..

+0

Pouvez-vous montrer où cette déclaration 'if' est en cours d'exécution? –

Répondre

0

Si le gestionnaire d'événements est sur le <div> lui-même, il suffit d'utiliser this au lieu de e.target (qui peut être un enfant), comme ceci:

if (!$(this).is("textarea.textobject, div.texteditor")) 
{ 
    // do stuff 
} 

. ..si à la place que vous voulez vérifier si la cible est partout dans l'un de ces 2 types de sélection, utilisez .closest() et .length, comme ceci:

if ($(e.target).closest("textarea.textobject, div.texteditor").length == 0) 
{ 
    // do stuff 
} 

Depuis .closest() travaux sur les éléments actuels et les parents, c'est assez pratique ici.

+0

Il doit avoir e.target. En fait, j'aurais pu le résoudre moi-même. Cela semble fonctionner. if (! $ (E.target) .is ("textarea.textobject, div.texteditor, div.texteditor *")) Il sélectionne div.texteditor, puis div.texteditor avec tout ce qu'il contient. – tmutton

+0

@codemonkey - cela peut fonctionner, vérifiez la solution '.closest()' ci-dessus bien, il fera la même chose plus efficacement :) –

+0

Je comprends ce qu'il fait et j'ai essayé votre solution, mais cela n'a pas fonctionné dans ce cas. – tmutton

0

Je ne sais pas, mais avez-vous essayé de créer d'autres événements assignés aux éléments à l'intérieur de la div? Quelque chose comme:

if ($(e.target).is("span") && $(e.target).parent("div.texteditor")) 
{ 
    // do stuff 
} 

Je ne sais pas si cela fonctionne, mais il est une idée!

J'espère que cela vous aide. ^^

Si vous souhaitez appliquer à tous les enfants, cela pourrait fonctionner:

if ($(e.target).parent("div.texteditor")) 
{ 
    // do stuff 
} 
+0

Cela pourrait fonctionner mais j'avais besoin d'un 'catch all' car les éléments de la div pourraient changer. – tmutton

+0

Eh bien, j'ai édité la réponse, voir si c'est ce dont vous avez besoin ^^ –

Questions connexes