Получить идентификатор родителя - PullRequest
0 голосов
/ 20 апреля 2010

У меня есть куча элементов, подобных следующему:

     <div class="droppableP" id="s-NSW" style="width:78px; height:63px; position: absolute; top: 223px; left: 532px;">  
 <div class="sensible"></div>  
      </div>  

У них всех есть класс droppableP, но разные идентификаторы, очевидно, и я хотел бы учесть код в этом скрипте, который я взламываю. В исходном сценарии есть только определенный селектор для каждого из этих элементов div, но код все похожи, за исключением идентификатора, с которым он работает, который является либо идентификатором родителя, либо другого элемента div с именем, связанным с ним. Вот оригинальный код специально для этого div:

$("#s-NSW > .sensible").droppable( {  
    accept : "#i-NSW",  
    tolerance : 'intersect',  
    activeClass : 'droppable-active',  
    hoverClass : 'droppable-hover',  
    drop : function() {  
        $('#s-NSW').addClass('s-NSW');  
        $('#s-NSW').addClass('encastrada');  //can't move any more..  
        $('#i-NSW').remove();  
        $('#s-NSW').animate( {  
            opacity: 0.25   
        },200, 'linear');  
        checkWin();  
    }  
 });  

Вот как я бы хотел учесть, чтобы один и тот же код мог выполнять все из них, и я в конечном итоге тоже буду делать цепочки и, возможно, избавлюсь от встроенных стилей, но вот мой первый шаг:

$(".droppableP > .sensible").droppable( {  
    accept :    "#i" + $(this).parent().attr('id').substring(2),   
    tolerance : 'intersect',  
    activeClass : 'droppable-active',  
    hoverClass : 'droppable-hover',  
    drop : function() {  
  $(this).parent().addClass($(this).parent().attr('id'));  
  $(this).parent().addClass('encastrada');   
  $("#i" + ($this).parent().attr('id').substring(2)).remove();   
  $(this).parent().animate( {  
      opacity: 0.25   
  },200, 'linear');  
  checkWin();  
    }  
});

Я получаю ошибку:

$(this).parent().attr("id") не определено

Большое спасибо. Я просмотрел похожие вопросы, которые, как я понимаю, ближе всего к моим, оказалось, что они вообще не нуждались в родительской функции. Я вроде нуб, поэтому, пожалуйста, не кричите на меня слишком сильно, если это глупый вопрос. и извините, у меня ужасное время с форматом

Ответы [ 2 ]

1 голос
/ 20 апреля 2010

Вы должны передать каждый перетаскиваемый элемент в свою функцию для обработки и вернуть true, если ваш дескриптор принимает это.

попробовать:

$(".droppableP > .sensible").droppable( {  
  accept : function(draggable) { 
    return $(draggable).attr("id") == "i" + $(this).parent().attr('id').substring(1);
},   
0 голосов
/ 22 апреля 2010

Вот решение, которое работает: мне нужен был каждый итератор. Я думаю, что это была волшебная пуля.

     $(".droppableP > .sensible").each(function() {
        $(this).droppable( {
           accept :    "#i" + $(this).closest('.droppableP').attr('id').substring(1), 
           tolerance : 'intersect',
           activeClass : 'droppable-active',
           hoverClass : 'droppable-hover',
           drop : function() {
               //console.log($(this).closest());
               $(this).closest('.droppableP').addClass($(this).closest('.droppableP').attr('id'));
               $(this).closest('.droppableP').addClass('encastrado');
               $("#i" + $(this).closest('.droppableP').attr('id').substring(1)).remove();
               $(this).closest('.droppableP').animate( {
                     opacity: 0.25 
                  },
                  200, 
                  'linear'
               );
               checkWin();
           }
        }); 
 });
...