2015-01-10 4 views
0

Мне нужно несколько советов, как я могу реализовать функцию для проверки следующего последнего узла, который является последним потомком на этом уровне вместе со своими дочерними элементами при щелчке родительского узла. Чтобы быть более конкретным, я попробую объяснить это на простом примере. Когда у нас есть дерево:Нестандартная проверка узлов в дереве

Node1 
Node9 
Node11 
Node15, Node14 
(Node4, Node5 - Node15's children), (Node2, Node3 - Node14's children) 

Когда я нажимаю, например, Node9, с ним также должны быть проверены узлы Node1, Node15, Node4 и Node5.

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

До сих пор у меня есть что-то вроде этого:

function checkNonstandard(click, check) { 

if(click.siblings().length>0) { 
    click.siblings().each(function() { 
     if($(this).is('ul') || $(this).is("li")) { 
       // if($(this).children().is(":last-child")){ 
       // if($(this).children().length == 0){ 
        // $(this).removeAttr('checked'); 
//here I wanted with no luck to put a condition to check only the next to last node with children 
       } 
       else{ 
        checkStandard($(this).children(), check); 

//this is a function to check every node for given parent and its ancestors 
       } 
     } else if($(this).is("input")) { 
      if(check==true) { 
       $(this).attr('checked', true); 
      } else { 
       $(this).removeAttr('checked'); 
      } 
     } 
    }); 
} 

Thx заранее за любые предложения, как справиться с этим.

+0

что-то вроде $ (this) .parent(). Find ("> *") – dandavis

ответ

0

Спасибо @dandavis за ответ, но я не смог найти его полезным в конце концов. Я попробовал несколько тестов и почти понял это. Я изменил код:

if(click.siblings().length>0) { 
    click.siblings().each(function() { 
     if($(this).is('ul') || $(this).is("li")) { 
     if(($(this).children().children().children().length < 1) && !($(this).parent().is(":last-child"))){ 
        $(this).children().removeAttr('checked'); 
        // $(this).parent().not(":last-child").removeAttr('checked'); 
        // $(this).parent().removeAttr('checked'); 
       } 
       else{ 
        checkNonstandard($(this).children(), check); 
       } 
     } else if($(this).is("input")) { 
      if(check==true) { 
       $(this).attr('checked', true); 
      } else { 
       $(this).removeAttr('checked'); 
      } 
     } 
    }); 

}

Он работает почти нормально, потому что проверка только низкие листы уровня, которые являются детьми рядом с последним узлом (п-1) последним ребенком, но листы проверено и отдых из (n-1) узлов. До сих пор я не знаю, почему какой-либо из двух комментариев, высказанных мной, не работает.

Смежные вопросы