Сложности с селекторами
Добрый день!
Есть код <ul class="ul-tree ul-drop" id="lasttree" style="display:block"> <li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Aenean commodo ligula eget dolor.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Aenean massa.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Nulla consequat massa quis enim.<input type="checkbox" id="checkbox1"/></p></li> </ul> </li> </ul> </li> <li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Aenean commodo ligula eget dolor.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Aenean massa.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Nulla consequat massa quis enim.<input type="checkbox" id="checkbox1"/></p></li> </ul> </li> </ul> </li> <li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Aenean commodo ligula eget dolor.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Aenean massa.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Nulla consequat massa quis enim.<input type="checkbox" id="checkbox1"/></p></li> </ul> </li> </ul> </li> <li><p>Duis leo.<input type="checkbox" id="checkbox1"/></p></li> </ul> <div> <button id="button-del">Удалить выбранные элементы</button> Пытаюсь удалить выделенные чекбоксами ветки с помощью //Удаление отмеченных чекбоксов $("#button-del").click(function(){ $('li:has(input:checked)').addClass('to-del'); $('li.to-del').detach(); }); Но он почему-то если выделен вложенный список, удаляет всю родительскую ветку. Как это можно исправить? Удалять нужно только выделенные чекбоксом элементы списка. |
Цитата:
<!DOCTYPE html> <html> <head> <script src='http://code.jquery.com/jquery-latest.js'></script> <!-- <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> <link rel='stylesheet type=text/css href=tmp.css' /> --> <style type='text/css'> </style> <script type='text/javascript'> $(function(){ $('#button-del').click(function(){ $('#lasttree :checked').each(function(){ var o=this.parentNode.parentNode; o.parentNode.removeChild(o); }); }); }); </script> </head> <body> <ul class="ul-tree ul-drop" id="lasttree" style="display:block"> <li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Aenean commodo ligula eget dolor.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Aenean massa.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Nulla consequat massa quis enim.<input type="checkbox" id="checkbox1"/></p></li> </ul> </li> </ul> </li> <li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Aenean commodo ligula eget dolor.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Aenean massa.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Nulla consequat massa quis enim.<input type="checkbox" id="checkbox1"/></p></li> </ul> </li> </ul> </li> <li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Aenean commodo ligula eget dolor.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Aenean massa.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Nulla consequat massa quis enim.<input type="checkbox" id="checkbox1"/></p></li> </ul> </li> </ul> </li> <li><p>Duis leo.<input type="checkbox" id="checkbox1"/></p></li> </ul> <button id="button-del">Удалить выбранные элементы</button> </body> </html> |
Ksa
Спасибо! А теперь можешь хотя бы примерно объяснить нубу как это работает? $('#lasttree :checked').each(function(){ var o=this.parentNode.parentNode; o.parentNode.removeChild(o); }); |
И может быть ещё подскажешь, как сделать так, чтобы при выделении родительского чекбокса автоматически выделялись все вложенные?
|
Цитата:
$('#lasttree :checked') Выбрал все дочерние отмеченные чеки элемента с ИД=lasttree... each(function(){/**/}) Запустил цикл по выбранным элементам var o=this.parentNode.parentNode; Вычислил элемент для удаления o.parentNode.removeChild(o); Удалил его. |
Цитата:
И может быть ещё подскажешь, как сделать так, чтобы при выделении родительского чекбокса автоматически выделялись все вложенные? |
Цитата:
$(this).closest('li').remove(). Так ниче не накроется если верстальщик обернет все в <div> допустим. |
Цитата:
<!DOCTYPE html> <html> <head> <script src='http://code.jquery.com/jquery-latest.js'></script> <!-- <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> <link rel='stylesheet type=text/css href=tmp.css' /> --> <style type='text/css'> </style> <script type='text/javascript'> $(function(){ $('#button-del').click(function(){ $('#lasttree :checked').each(function(){ var o=this.parentNode.parentNode; o.parentNode.removeChild(o); }); }); $(':checkbox').click(function(){ $(this.parentNode.parentNode).find(':checkbox').prop('checked',this.checked); var oli=$('li'); for (var i=oli.length; i>0; i--) { var o=oli.eq(i-1); var n=o.find('ul > li :checkbox').length; if (n>0) { var ok=o.find('ul > li :checked').length; o.children('p').find(':checkbox').prop('checked',n==ok); }; }; }) }); </script> </head> <body> <ul class="ul-tree ul-drop" id="lasttree" style="display:block"> <li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Aenean commodo ligula eget dolor.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Aenean massa.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Nulla consequat massa quis enim.<input type="checkbox" id="checkbox1"/></p></li> </ul> </li> </ul> </li> <li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Aenean commodo ligula eget dolor.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Aenean massa.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Nulla consequat massa quis enim.<input type="checkbox" id="checkbox1"/></p></li> </ul> </li> </ul> </li> <li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Aenean commodo ligula eget dolor.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Aenean massa.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Nulla consequat massa quis enim.<input type="checkbox" id="checkbox1"/></p></li> </ul> </li> </ul> </li> <li><p>Duis leo.<input type="checkbox" id="checkbox1"/></p></li> </ul> <button id="button-del">Удалить выбранные элементы</button> </body> </html> |
Цитата:
А можно ли сделать так, чтобы сверху вниз по вложенности только выделялось? Например, если родительский список состоит из 2х, а они двое сами по себе выделены - он не выделялся. А то у меня просто дерево каталогов на основе списка будет :) |
Цитата:
<!DOCTYPE html> <html> <head> <script src='http://code.jquery.com/jquery-latest.js'></script> <!-- <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> <link rel='stylesheet type=text/css href=tmp.css' /> --> <style type='text/css'> </style> <script type='text/javascript'> $(function(){ $('#button-del').click(function(){ $('#lasttree :checked').each(function(){ var o=this.parentNode.parentNode; o.parentNode.removeChild(o); }); }); $(':checkbox').click(function(){ $(this.parentNode.parentNode).find(':checkbox').prop('checked',this.checked); /* var oli=$('li'); for (var i=oli.length; i>0; i--) { var o=oli.eq(i-1); var n=o.find('ul > li :checkbox').length; if (n>0) { var ok=o.find('ul > li :checked').length; o.children('p').find(':checkbox').prop('checked',n==ok); }; }; */ }) }); </script> </head> <body> <ul class="ul-tree ul-drop" id="lasttree" style="display:block"> <li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Aenean commodo ligula eget dolor.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Aenean massa.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Nulla consequat massa quis enim.<input type="checkbox" id="checkbox1"/></p></li> </ul> </li> </ul> </li> <li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Aenean commodo ligula eget dolor.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Aenean massa.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Nulla consequat massa quis enim.<input type="checkbox" id="checkbox1"/></p></li> </ul> </li> </ul> </li> <li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Aenean commodo ligula eget dolor.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Aenean massa.<input type="checkbox" id="checkbox1"/></p> <ul> <li><p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.<input type="checkbox" id="checkbox1"/></p></li> <li><p>Nulla consequat massa quis enim.<input type="checkbox" id="checkbox1"/></p></li> </ul> </li> </ul> </li> <li><p>Duis leo.<input type="checkbox" id="checkbox1"/></p></li> </ul> <button id="button-del">Удалить выбранные элементы</button> </body> </html> |
Часовой пояс GMT +3, время: 16:25. |