遍历Html元素使用Jquery直到特定属性(id)

时间:2012-05-10 16:16:04

标签: html dom jquery

我正在使用Jquery 1.7.2。  

我想使用Jquery on来横向Html元素直到一个特定属性(id) 将鼠标悬停在我页面中的任何html元素上。

我们有parents()函数,但问题是如何在具有id属性

的父元素上选择stop
$("*", document.body).click(function (e) {
  e.stopPropagation();
  var domEl = $(this).get(0);      
      var parentEls = $(domEl).parents()
        .map(function () { 
              return this.tagName; 
            })
        .get().join(", ");

$(“b”)。append(“”+ parentEls +“”);     });

这是代码,但我得到所有元素直到root 但我想停止在标签

中具有属性id的壁橱元素

请帮帮我。

2 个答案:

答案 0 :(得分:3)

只需使用closest

$(this).closest('#the-id');

除非您只是寻找具有任何id属性的最近的属性,否则将是:

$(this).closest('[id]');

编辑:看到更新的问题后,这应该是您想要的:

$(document).click(function(e) {
    e.preventDefault();
    var parents = $(e.target).parentsUntil('[id]')
        .map(function() { return this.tagName; }).get().join(',');
    console.log(parents);
});

请注意,此方法可以实现您想要的,而无需选择并将点击事件绑定到DOM中的每个节点,这是一种非常严厉的方法。


编辑(再次):看起来好像你想要在其上包含带有id属性的标签(上述解决方案是一切,但不包括该标签)。为此,解决方案非常相似:

$(document).click(function(e) {
    e.preventDefault();
    var $parents = $(e.target).parentsUntil('[id]');
    var tagNames = $parents.add($parents.parent())
        .map(function() { return this.tagName; }).get().join(',');
    console.log(tagNames);
});

答案 1 :(得分:1)

您似乎希望将已点击元素的层次结构映射到文档根目录。在这种情况下,您可以将parents()应用于event.target

$(document).click(function(e) {
    e.preventDefault();
    var parentEls = $(e.target).parents().map(function() { 
        return this.tagName; 
    }).get().join(", ");
});

请注意,作为jmar777,您还应该更改选择器:"*"所有元素添加事件处理程序,这可能不是您想要的。将单个处理程序绑定到document,而不是利用事件冒泡。