0

我有这个获取父元素的 id 和文本的for 循环

for (var i = 1; i < parents_num; i++) 
{
  var prev_parent_text = jQuery(id).parent().parent().find('> .myclass').text();     
  var prev_parent_id = jQuery(id).parent('ul').parent('li').attr('id');
}

我想要做的是在每个循环中将 parent() 的数量增加2:例如,

对于 i = 1:

var prev_parent_text = jQuery(id).parent().parent().find('> .myclass').text();  
var prev_parent_id = jQuery(id).parent('ul').parent('li').attr('id');

对于 i = 2:

var prev_parent_text = jQuery(id).parent().parent().parent().parent().find('> .myclass').text();  
var prev_parent_id = jQuery(id).parent('ul').parent('li').parent('ul').parent('li').attr('id');

对于 i = 3:

var prev_parent_text = jQuery(id).parent().parent().parent().parent().parent().parent().find('> .myclass').text();  
var prev_parent_id = jQuery(id).parent('ul').parent('li').parent('ul').parent('li').parent('ul').parent('li').attr('id');

等等..

我没有成功使用 eq() 函数:

var num = (i*2) - 2
var prev_parent_text = jQuery(id).parent().eq(num).find('> .myclass').text();  
var prev_parent_id = jQuery(id).parent('ul').parent('li').eq(num).attr('id');

感谢您的任何帮助

4

2 回答 2

3

为每个步骤保留一个参考,并更新每个步骤的参考:

var $id = jQuery(id);
var $li = jQuery(id);

for (var i = 1; i < parents_num; i++) {
  $id = $id.parent().parent();
  $li = $li.parent('ul').parent('li');
  var prev_parent_text = $id.find('> .myclass').text();     
  var prev_parent_id = $li.attr('id');
}
于 2013-04-06T13:19:32.880 回答
1

您可以为此添加自定义 jquery 函数,如下所示:

$.fn.nparent = function(n) { 
    var elem = $(this);
    for (var i=0;i<n;i++) {
       elem = elem.parent();
    }
    return elem;
}

并像这样使用它:

var id = $('#element').nparents(4).attr('id'); 
于 2013-04-06T13:21:57.433 回答