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 に答える