如何获取位于点击点的所有元素的列表?

Mis*_*hko 14 html javascript jquery click

在用户点击时,我想获得位于点击点的所有元素的列表.

例如,如果用户点击Hello此处:

<div><span>Hello<span></div>
Run Code Online (Sandbox Code Playgroud)

我想得到以下列表:

  • <span> 元件
  • <div> 元件
  • <body> 元件
  • <html> 元件

获得这些元素最简单的方法是什么?

use*_*716 13

编辑:根据澄清,我认为这是你的意思:

编辑:正如指出的@Misha,outerWidth()outerHeight()应代替使用width(),并height()为了得到一个准确的range.

此外,如果有什么可以阻止事件冒泡的页面上,则click应该置于document因为这将是很多更有效率.即使一些其他click处理防止起泡,你应该还是有clickdocument,只是从那些阻止冒泡处理器单独处理它.

示例: http ://jsfiddle.net/57bVR/3/

$(document).click(function(e) {
    var clickX = e.pageX
        ,clickY = e.pageY
        ,list
        ,$list
        ,offset
        ,range
        ,$body = $('body').parents().andSelf();

    $list = $('body *').filter(function() {
        offset = $(this).offset();
        range = {
            x: [ offset.left,
                offset.left + $(this).outerWidth() ],
            y: [ offset.top,
                offset.top + $(this).outerHeight() ]
        };
        return (clickX >= range.x[0] && clickX <= range.x[1]) && (clickY >= range.y[0] && clickY <= range.y[1])
    });

    $list = $list.add($body);

    list = $list.map(function() {
        return this.nodeName + ' ' + this.className
    }).get();
    alert(list);
    return false;
});?
Run Code Online (Sandbox Code Playgroud)

原始答案:

这将为您提供包含范围的标签名称数组.无法确定这是否是你想要的.

它采用了.parents()一起.andSelf()拿到的元素,然后使用.map().get()创建阵列.

示例: http ://jsfiddle.net/9cFTG/

var list;

$('span').click(function() {
    list = $(this).parents().andSelf().map(function() {
        return this.nodeName;
    }).get();
    alert(list);
});?
Run Code Online (Sandbox Code Playgroud)

如果你只是想要的元素,而不是标签名称,摆脱.map().get().

或者,如果您想使用某种分隔符将Array加入String,只需添加.join(" ")之后.get(),将分隔符放在引号内.


Per*_*ijn 9

在不久的将来,这应该是可能的:

$(document).click(function(e) {
    var family = this.elementsFromPoint(e.pageX, e.pageY);
    $(family).each( function () {
            console.log(child);
    });
});
Run Code Online (Sandbox Code Playgroud)

从点开始的元素