【问题标题】:Returning the full path to an element?返回元素的完整路径?
【发布时间】:2013-02-24 20:32:00
【问题描述】:

我正在寻找一种方法来找到点击元素的完整路径。

例如,假设我有这个 HTML 代码:

<div> <ul> <li>item 1</li> <li>item 2</li> </ul> </div>
<div> <ul> <li>item 1</li> <li>item 2</li> </ul> </div>

我希望能够将路径(不知道还能叫什么)返回给点击者 元素。 alert() 现在可以了。

假设我点击了第二个 div 中的第二个 li 元素。我想打电话 背面:

div:eq(1) li:eq(1)

如果我点击第一个 div 的第一个 li 元素,它将是:

div:eq(0) li:eq(0)

我该怎么做?

是否有可以做到这一点的插件,或者我需要从头开始制作它以获取路径中元素的索引?

谢谢:)

【问题讨论】:

标签: jquery html


【解决方案1】:

如果你想要插件方式:

(function($){
    $.fn.extend({
        getFullPath: function(stopAtBody){
            stopAtBody = stopAtBody || false;
            function traverseUp(el){
                var result = el.tagName + ':eq(' + $(el).index() + ')',
                    pare = $(el).parent()[0];
                if (pare.tagName !== undefined && (!stopAtBody || pare.tagName !== 'BODY')){
                    result = [traverseUp(pare), result].join(' ');
                }                
                return result;
            };
            return this.length > 0 ? traverseUp(this[0]) : '';
        }
    });
})(jQuery);

为 jQuery 指定一个选择器或对象,它将获得它的完整路径。 stopAtBody 是可选的,但如果提供为 true,它只会遍历到 &lt;BODY&gt; 标记(使其成为有效的 jQuery 选择器)。

DEMO(点击 LI 查看他们的路径)

【讨论】:

  • 哇!你摇滚布拉德!谢谢你。当我有时间时,我会研究它的代码,但这看起来正是我需要的。对于这样一个惊人的答案,你想要一些补偿吗? :)
  • @user:支票抬头 Brad Christie, c/o Brad Christie Inc. --- 开个玩笑。我来这里是为了帮助别人,而不是得到补偿,尽管我很感激这个提议。很高兴听到它是您正在寻找的东西。 ;-)
  • 嘿布拉德,有没有办法私下给你发消息?我有一些关于这个和我使用它的方式的问题。我可以支付你的时间。 :)
  • 这实际上不适用于more complex DOM。无论tagName:eq 计数相同的标签,index() 返回子订单。
【解决方案2】:

这是重建完整路径的方法:

var q = $(this)
  .parentsUntil('body')
  .andSelf()
  .map(function() {
    return this.nodeName + ':eq(' + $(this).index() + ')';
  }).get().join('>');

灵感来自this answer

【讨论】:

    【解决方案3】:

    .parents()

    这样可以吗?

    【讨论】:

    • 我猜从Danip所说的,我不认为它会给我元素的eq()。
    【解决方案4】:

    你读过 parents() 函数吗? http://api.jquery.com/parents/

    你可以得到这样的东西

    我的父母是:SPAN、P、DIV、BODY、HTML

    【讨论】:

    • 不提供 OP 想要的“eq(n)”限定符。
    • 我可以调查一下。有没有办法返回 eq()?索引可以吗?
    猜你喜欢
    • 2018-04-09
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多