1

我正在使用 Jquery 1.7.2。

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

我们有 parents() 函数,但问题是如何在具有 id 属性的父元素上选择停止

$("*", 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 + " "); });

这是代码,但我正在获取所有元素直到根,但我想停在标签中具有属性 id 的壁橱元素上

请帮帮我。

4

2 回答 2

3

只需使用最接近的

$(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);
});
于 2012-05-10T16:17:50.157 回答
1

看起来您想要将层次结构从单击的元素映射到文档根。在这种情况下,您可以将parents()应用于event.target

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

Note that, as jmar777, you should also change your selector: "*" adds an event handler to all the elements, which is probably not what you want. Bind a single handler to document instead to take advantage of event bubbling.

于 2012-05-10T16:26:32.283 回答