あなたの探求は少し混乱していますが、私はあなたの目標を達成するための多くの方法のほんの一部を完全に分類しようとします.
特定の子によってトリガーされない親 Div のクリックを作成しようとしている場合は、次のように単純にevent.stopPropagation()を使用できます。
// Noticed I did not use an ID call here for your parent div, the reason is simple,
// You stated you use it like a "template" and clone it, or at least parts from it, thus it might
// (depending on how you use it) have multiple positions in your document, thus, one set ID just
// will not do. So I pretended as if you had already added a similar named class to the parent
// div, thus calling forth this click function on ALL div's containing said class
$(".build_blankrow")
// This call to .live will ensure you can call the click function dynamically
// on "future" created divs containing the same class name
.live("click", function(e) { /* do work */ })
// This is called "chaining" in jquery
// Our .live click func returns the originally called '$(".build_blankrow")'
// ALSO: in NEWER jQuery, .live is replaced with .on
// Thus we dont need to make a new call just to get to its childrean
// .find will allow us to search the children for exactly what we need
// in this case we're grabbing the span with the class 'track_options'
// and setting its click func (this will effect its children) to stop propagation to parents
.find(".track_options")
.live("click", function(e) { e.stopPropagation(); });
track_options のすべての子で stop prop を使用したくない場合があるため、.filter()を使用します。この便利な jQuery 関数を使用すると、選択した track_options の内部要素で prop を正確に停止できます。以下の例を参照してください。
// You will notice not much change at start
$(".build_blankrow")
.live("click", function(e) { /* do work */ })
.find(".track_options span")
// Here comes the change, gota love .filter
// Here I will get only the children elements for download and play now
.filter(".track_options_download, .track_options_playnow")
// KEEP IN MIND, if your using NEWEST jQuery, then replace .live with .on
// like so: .on("click", funct.....
.on("click", function(e) { e.stopPropagation(); console.log("WHAT"); });
jQuery の CSS セレクターを利用して、必要に応じて各要素に到達する巧妙な方法を考え出すことができます。何かのようなもの:
$(".build_blankrow")
.on("click", function(e) { /* do work */ })
// Here I use simple CSS to filter out the autoplaylist child
.find(".track_options span:not(.track_options_addtoplaylist)")
.on("click", function(e) { e.stopPropagation(); });
前のコードで使用された重要な jQuery リンク:
- 。住む()
- 。の上()
- 。クリック()
- 。探す()
- 。フィルター()
- .stopPropagation()
- jQuery セレクター
他に興味深いもの (食べたくない 4 歳児に対処しなければならないことを除いて、例を示します! grrr) は.andSelf()です。次のように、 track_options とその子の 1 つまたは 2 つを取得するための呼び出しを行うことができます。$(".track_options).find("span:not(.track_options_addtoplaylist)").andSelf();