【问题标题】:Determining if clicked element is inside a specific div确定点击的元素是否在特定的 div 内
【发布时间】:2012-12-28 17:53:34
【问题描述】:

我有一系列带有“addelement”类的 div,它们是动态添加的。 在所有这些层中都有更多嵌套的 div,其中一个包含一些带有附加事件的图像。当我点击其中一张图片时,我想知道它是否在这些 div 的最后一个:

if($(this).is('div.addedelement:last div.contextmenu img.up'))
{
    alert('Ok');
}

我不知道为什么,但是这个条件表达式的触发与触发器是否位于最后一个“添加元素”的 div 中的情况无关。但是,如果我尝试将 css 应用于这样的元素:

$('div.addedelement:last div.contextmenu img.up').css('display','none');

它就像一个魅力。 我错过了什么? 有人可以帮帮我吗?

【问题讨论】:

  • 可以添加相关的HTML标记和点击事件吗?此外,如果您可以在 jsFiddle.net 上找到一个小提琴,那将更好地让其他人快速测试可能的解决方案。
  • LAST 是什么意思?
  • 系列的最后一项。
  • 你试过 .next() 它是一种 hack 但有帮助.... .next('Div').length != null

标签: jquery event-delegation


【解决方案1】:

一个选项是使用 jQuery index 方法,如果缓存的 jQuery 对象的长度(-1 ) 等于 jQuery 集合中父元素的索引,则该元素为最后一个。

// define these variables outside of the event handler 
var $a = $('div.addedelement'), len = $a.length - 1; 

// within your event handler
var cur = $(this).closest('div.addedelement').get(0);
if ( $a.index(cur) === len ) {
   // last
}

http://jsfiddle.net/Ga5s9/

但是。如果您只想为类为addedelement 的最后一个 div 元素中的图像注册处理程序,您可以编写代码:

$('div.addedelement').last().find('img.up').click(function(){
   // last
})

【讨论】:

  • 谢谢!您的代码在 jsfiddle 中有效,但在我的页面中无效......这里一定有什么东西让它失败了。
  • @user997593 不客气,您在控制台上看到任何错误吗?
  • 不,控制台很清楚,事实是我有一堆嵌套的 div,可能已经太深了......
猜你喜欢
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多