1

我有这个标记:

<div class=gui>
    <div class=form>
        <div class=textbox></div>
        <div class=textbox></div>
        <div class=textbox></div>
        <div class=selectbox></div>
        <div class=selectbox></div>
        <div class=button></div>
    </div>
</div>

我想要做的是迭代 div 并找到它们相应的父母。喜欢:

文本框 > 表单

选择框 > 表格

按钮 > 表格

表格 > gui

这是我的 jQuery 选择器:

var dParent = div.closest("div.form, div.gui");

它适用于文本框和选择框,但不适用于表单。奇怪的是,表单将自己报告为父级而不是 gui。

有什么想法可能是错的吗?

谢谢

4

3 回答 3

4

.closest()如果它与选择器匹配,将选择调用元素,因此当您调用$('.form').closest('.form, .gui')它时,它将返回自己.form作为最接近的元素。因此,您只需从以下位置调用最接近的.parent()

var dParent = div.parent().closest("div.form, div.gui");

查看示例 →

于 2011-03-26T16:34:09.663 回答
2
var parent = div.hasClass('form') ? div.closest('.gui') : div.closest('.form');

我最好的猜测是对结构一无所知。

于 2011-03-26T16:19:58.000 回答
0

Closest从当前元素开始,向上遍历树,直到找到与选择器匹配的元素。当您从表单开始时,表单本身与选择器匹配,因此被选中。由于您要做的就是找到父级,因此使用的适当方法是带有选择器的父级:

  div.parents('.form:first,.gui:first');

像这样使用:

  div.each( function() {
      alert( $(this).attr('class')
                + ' has parent '
                + $(this).parents('.form:first,.gui:first')
                         .attr('class')
      );
  });

请参阅示例:http: //jsfiddle.net/tFqLE/

于 2011-03-26T16:27:02.367 回答