jQuery多个parent()调用

时间:2013-04-06 13:12:56

标签: javascript jquery

我有 for循环,它获取父元素的ID和文本:

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()的数量: 例如,

表示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()函数unsuccesfully:

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');

感谢您的帮助

2 个答案:

答案 0 :(得分: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');
}

答案 1 :(得分: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');