我有这个标记:
<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并找到他们相应的父母。 像:
文本框&gt;形式
selectbox&gt;形式
按钮&gt;形式
表格&gt; GUI
这是我的jQuery选择器:
var dParent = div.closest("div.form, div.gui");
它适用于文本和选择框,但不适用于表单。 奇怪的是,表单将自己报告为父级而不是gui。
任何想法可能出错?
感谢
答案 0 :(得分:4)
.closest()
将会选择调用元素,因此当您调用$('.form').closest('.form, .gui')
时,它将返回自身.form
作为最接近的元素。因此,您只想从.parent()
:
var dParent = div.parent().closest("div.form, div.gui");
答案 1 :(得分:2)
var parent = div.hasClass('form') ? div.closest('.gui') : div.closest('.form');
我最好的猜测是不了解结构的任何其他内容。
答案 2 :(得分:0)
Closest通过从当前元素开始并遍历树直到找到与选择器匹配的元素为止。当您从表单开始时,表单本身与选择器匹配,因此选择它。由于您要做的只是查找父级,因此使用的适当方法是parents和选择器:
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/