Javascript 使用相同名称的嵌套div,单击选择正确的div
我有一个问题,就是我在同一个类中嵌套了div。例如,我有一些类似于面板的东西,在面板内部。但是,当我单击第一个面板内的面板时,触发Javascript 使用相同名称的嵌套div,单击选择正确的div,javascript,jquery,Javascript,Jquery,我有一个问题,就是我在同一个类中嵌套了div。例如,我有一些类似于面板的东西,在面板内部。但是,当我单击第一个面板内的面板时,触发 $(".panel").click 功能。然而,我需要以某种方式深入到鼠标实际点击的面板。换句话说,如果我有以下代码: <div class="panel"> //first panel <div class="panel"> //second panel </div> </div>
$(".panel").click
功能。然而,我需要以某种方式深入到鼠标实际点击的面板。换句话说,如果我有以下代码:
<div class="panel"> //first panel
<div class="panel"> //second panel
</div>
</div>
//第一个面板
//第二小组
当我想让第二个面板触发点击时,我会让父面板触发点击。这是有意义的,因为第二个面板被包装在第一个面板中。然而,我想知道是否有办法解决这个问题?理论上,我正在编写的代码可以在其他面板中包含无限多个面板。有没有办法一直钻到鼠标点击的面板?(不是包含面板)
编辑:
以下是整个代码段:
<style type="text/css">
body
{
height: 700px;
}
.gridSegment
{
width: 50%;
height: 50%;
float: left;
outline: 2px solid black;
}
</style>
<script type="text/javascript">
$(document).ready(function(){
var lastID = 10;
$(".gridSegment").dblclick(function(){
console.log($(this).attr("ID"));
lastID++;
$(this).append("<div class='gridSegment' id='" + lastID + "'></div>");
lastID++;
$(this).append("<div class='gridSegment' id='" + lastID + "'></div>");
lastID++;
$(this).append("<div class='gridSegment' id='" + lastID + "'></div>");
lastID++;
$(this).append("<div class='gridSegment' id='" + lastID + "'></div>");
return false;
});
});
</script>
</head>
<body>
<div class='gridSegment'>
<div class='gridSegment' id ="1"></div>
<div class='gridSegment' id ="2"></div>
<div class='gridSegment' id ="3"></div>
<div class='gridSegment' id ="4"></div>
</div>
</body>
身体
{
高度:700px;
}
.网格段
{
宽度:50%;
身高:50%;
浮动:左;
外形:2倍纯黑;
}
$(文档).ready(函数(){
var-lastID=10;
$(“.gridSegment”).dblclick(函数(){
log($(this.attr(“ID”));
lastID++;
$(此)。追加(“”);
lastID++;
$(此)。追加(“”);
lastID++;
$(此)。追加(“”);
lastID++;
$(此)。追加(“”);
返回false;
});
});
使用id
<div class="panel" id="panel_1">
<div class="panel" id="panel_2">
...
使用身份证
<div class="panel" id="panel_1">
<div class="panel" id="panel_2">
...
看看这个(请原谅这些难看的颜色——我是程序员而不是设计师;) 当捕获单击以停止事件冒泡返回到包含元素时,只需返回false 看看这个
(请原谅这些难看的颜色——我是程序员而不是设计师;)
当捕获单击以停止事件冒泡返回到包含元素时,您所要做的就是返回false。我冒昧地稍微更改了代码(仅用于示例)。主要是循环,我还更改了
id
属性以添加更多的信息-现在您可以确切地看到自己处于哪个级别。如果您觉得它适合您的需要,那么您可以通过各种方式将其应用到您的应用程序中
您在评论中提到,.live()
函数可以解决您的问题,但是从jQuery 1.7开始,此功能已被弃用,如果无法使用on()
,建议使用委托()
函数代替live()
。下面是我使用delegate()
函数的解决方案
正如您所看到的,语法类似于我们将回调附加到容器元素,并指定要使用的内部选择器——在我们的示例中,它是any.gridSegment
元素
$("#body").delegate(".gridSegment", "dblclick", function() {
var $thisCached = $(this);
console.log($thisCached,$(this).parent());
var lastId = $thisCached.attr("id");
var limit = 4;
var counter = 1;
while(counter <= limit){
var newId = lastId + '_' + counter;
counter++;
$thisCached.append("<div class='gridSegment' id='" + newId + "'></div>");
}
return false;
});
$(“#body”).delegate(“.gridSegment”,“dblclick”,function(){
var$thisCached=$(this);
log($thisCached,$(this.parent());
var lastId=$thisCached.attr(“id”);
var限值=4;
var计数器=1;
while(counter我已经自由地稍微更改了您的代码(仅举个例子)。主要是循环,我还更改了id
属性以添加更多的信息-您现在可以确切地看到您所处的级别。如果您觉得它适合您的需要,那么您可以想尽一切办法将其应用到您的应用程序中
您在一篇评论中提到,.live()
函数可以解决您的问题,但是从jQuery 1.7开始,此功能已被弃用,如果无法使用on()
函数,建议使用委托()
函数代替live()
。因此,下面是我使用委托()
函数的解决方案
正如您所看到的,语法类似于我们将回调附加到容器元素,并指定要使用的内部选择器——在我们的示例中,它是any.gridSegment
元素
$("#body").delegate(".gridSegment", "dblclick", function() {
var $thisCached = $(this);
console.log($thisCached,$(this).parent());
var lastId = $thisCached.attr("id");
var limit = 4;
var counter = 1;
while(counter <= limit){
var newId = lastId + '_' + counter;
counter++;
$thisCached.append("<div class='gridSegment' id='" + newId + "'></div>");
}
return false;
});
$(“#body”).delegate(“.gridSegment”,“dblclick”,function(){
var$thisCached=$(this);
log($thisCached,$(this.parent());
var lastId=$thisCached.attr(“id”);
var限值=4;
var计数器=1;
while(counter)这些div是否有任何父级,如div
?这些div是否有任何父级,如div
?嗯,很奇怪。似乎单击的执行顺序是自上而下而不是自下而上。换句话说,只要我单击,它就会看到包装面板并停在那里。它会返回相同的面板(我已分配ID)哪一个是父面板。您可以用您正在使用的更多代码更新您的帖子吗?正如您从我发布的JSFIDLE示例中看到的,这应该可以工作……我已经发布了其余的代码。似乎当Jquery添加到新的网格段中时,您所提供的代码解决方案由于某种原因不再工作……啊…动态添加元素…没问题:)查看我的更新…只需将click()
更改为on('click')
,这就是为什么我更喜欢后端web开发而不是前端web开发的原因。我觉得我浪费了很多时间修复只需要“用不同的措辞”的bug.Hmmm,奇怪。似乎单击的执行顺序是自上而下而不是自下而上。换句话说,只要我单击,它就会看到包装面板并停在那里。它会返回相同的面板(我已分配ID)哪一个是父面板。您可以用您正在使用的更多代码更新您的帖子吗?正如您从我发布的JSFIDLE示例中看到的,这应该可以工作……我已经发布了其余的代码。似乎当Jquery添加到新的网格段中时,您所提供的代码解决方案由于某种原因不再工作……啊…动态添加元素…没问题:)查看我的更新…只需将click()
更改为on('click')$("#body").delegate(".gridSegment", "dblclick", function() {
var $thisCached = $(this);
console.log($thisCached,$(this).parent());
var lastId = $thisCached.attr("id");
var limit = 4;
var counter = 1;
while(counter <= limit){
var newId = lastId + '_' + counter;
counter++;
$thisCached.append("<div class='gridSegment' id='" + newId + "'></div>");
}
return false;
});