【问题标题】:How do i find a child div winthin a parent with the mouse, div has only a classname如何用鼠标在父级中找到子 div,div 只有一个类名
【发布时间】:2012-12-03 21:17:28
【问题描述】:

对不起,如果这已经被问过了,但我找不到我需要的确切解决方案。

我是 jquery 的菜鸟,正在制作报纸版面表格。我可以使用此代码在布局画布中创建新的 div,而不会出现问题

function makeSplashBlockdiv() {
    $("#canvas").append('<div class="SplashBlock" class="bar">Splash Block 700X250</div>')
    $(".SplashBlock").draggable({
        containment: "#canvas",
        scroll: false,
        grid: [10, 10]
    }, {
        cursor: "move",
        cursorAt: {
            top: 125,
            left: 350
        }
    })
}​

还有其他不同大小和类名的 div。我没有使用id,因为程序可以创建多个相同类型的div,所以id

所有这些 div 都放在一个名为 #canvas 的 div 中。

我需要能够用鼠标选择一个 div 并将其删除,我可以找到最接近的 div 与此代码但没有任何反应。

$("#canvas").click(function(event) {
    $("#log").html("clicked: " + event.target.className);

我知道应该有一个点击处理程序,但我无法弄清楚这部分。

任何帮助将不胜感激。

【问题讨论】:

  • 将点击事件绑定到 div 的类,而不是绑定到包含它们的画布。这样您就可以使用$(this) 访问点击的 div 并删除它(例如$(this).remove()
  • 我明白了,问题是我没有把jquery放在画布里面

标签: jquery class html mouse


【解决方案1】:

将 click 事件绑定到 div 的类,而不是绑定到包含它们的画布。

例如

$(".divclass").click(function(){});

这样您就可以使用$(this) 访问点击的 div 并将其删除

例如

$(".divclass").click(function(){
   $(this).remove()
});

【讨论】:

  • 不,最好做 OP 已经在做的事情(事件委托)。
  • 我只是这个,它不起作用。我应该把这段代码放在哪里?
  • 把它放到$(document).ready()函数中。只要确保你的divs 确实有我称为.divclass的课程@
  • 我明白了,问题是我没有把jquery放在画布里面,谢谢你的帮助。
【解决方案2】:

下面会为所有点击的div添加一个selected类。

function makeSplashBlockdiv() {
    var $myNewDiv = $('<div class="SplashBlock" class="bar">Splash Block 700X250</div>');

    $myNewDiv.click(function () {
        $(this).addClass("selected");
    });

    $("#canvas").append($myNewDiv);

    $(".SplashBlock").draggable({
        containment: "#canvas",
        scroll: false,
        grid: [10, 10]
    }, {
        cursor: "move",
        cursorAt: {
            top: 125,
            left: 350
        }
    });
}​

然后您可以通过$("#canvas .selected") 操作所有选定的div。

【讨论】:

    【解决方案3】:

    几个选项供您选择:

    1) 在event.target 上使用closest

    $("#canvas").click(function(event) {
        var theDiv = $(event.target).closest('div');
        // ...
    });
    

    这将找到鼠标点击的 div。 closest 从集合中的元素开始,找到与选择器匹配的第一个元素,并根据需要通过父元素进行处理。

    2) 或者,您可以通过 delegate 更改您的 click 处理程序以显式使用事件委托,让 jQuery 为您执行此操作:

    $("#canvas").delegate("div", "click", function(event) {
        var theDiv = $(this);
        // ...
    });
    

    在较新版本的 jQuery 中,您可以改用on(注意参数顺序的变化);

    $("#canvas").on("click", "div", function(event) {
        var theDiv = $(this);
        // ...
    });
    

    ...虽然我个人更喜欢delegate的清晰。

    【讨论】:

    • 我把上面的代码放在 标签之后。这是我输入的代码的剪切和粘贴。 当我点击一个 div 时,我没有看到任何输出
    • @Chris: "我把上面的代码放在 标记之后。" 那么你的带有id "canvas" 的元素将不存在代码运行,因此代码无法在其上设置事件处理程序。要么将script 元素移动到文档的end,就在结束&lt;/body&gt; 标记的上方,或者使用jQuery 的ready 功能(但如果你真的不需要使用ready控制脚本标签在文档上的位置)。
    • 我明白了,问题是我没有将 jquery 放在画布内。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 2011-06-05
    • 2015-12-13
    • 2016-07-11
    • 1970-01-01
    • 2017-08-13
    • 2018-04-08
    • 2021-11-04
    相关资源
    最近更新 更多