{"action":"created","issue":{"url":"https://api.github.com/repos/Imangazaliev/DiDOM/issues/91","repository_url":"https://api.github.com/repos/Imangazaliev/DiDOM","labels_url":"https://api.github.com/repos/Imangazaliev/DiDOM/issues/91/labels{/name}","comments_url":"https://api.github.com/repos/Imangazaliev/DiDOM/issues/91/comments","events_url":"https://api.github.com/repos/Imangazaliev/DiDOM/issues/91/events","html_url":"https://github.com/Imangazaliev/DiDOM/issues/91","id":276205134,"number":91,"title":"Удаление элементов в цикле в дочернем элементе / удаление всех комментариев.","user":{"login":"nepohex","id":22717454,"avatar_url":"https://avatars1.githubusercontent.com/u/22717454?v=4","gravatar_id":"","url":"https://api.github.com/users/nepohex","html_url":"https://github.com/nepohex","followers_url":"https://api.github.com/users/nepohex/followers","following_url":"https://api.github.com/users/nepohex/following{/other_user}","gists_url":"https://api.github.com/users/nepohex/gists{/gist_id}","starred_url":"https://api.github.com/users/nepohex/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nepohex/subscriptions","organizations_url":"https://api.github.com/users/nepohex/orgs","repos_url":"https://api.github.com/users/nepohex/repos","events_url":"https://api.github.com/users/nepohex/events{/privacy}","received_events_url":"https://api.github.com/users/nepohex/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2017-11-22T21:11:58Z","updated_at":"2017-11-23T04:24:38Z","closed_at":null,"author_association":"NONE","body":"Добрый день! Хочу удалить все комментарии из документа, удаление обычных элементов делаю вот так (не слишком криво ли? другой способ вообще не смог сообразить):\r\n\r\n```php\r\n$try = $document->find('.entry'); //Получаю массив элементов\r\n$try_doc = $try[0]->toDocument(); //Конверт в документ\r\n\r\n//Удаление из документа (=элемента полной версии документа) всех ненужных мне элементов в цикле\r\n\r\nwhile ($try_doc->find('script')) { \r\n    $try_doc->first('script')->remove();\r\n}\r\n\r\n//Обратная конвертация в элемент\r\n$try_doc = $try_doc->toElement();\r\n//Замена в первоначальном документе элемента с уже удаленными ненужными элементами\r\n$document->first('.entry')->replace($try_elem);\r\n```\r\n\r\nА вот как удалить все комментарии в элементе '.entry' - никак не разберусь. Селекторов никаких нету. Пробовал разные итерации типа nextSubling и далее проверку на isCommentNode , но получается вечный цикл: \r\n\r\n```php\r\nwhile($z = $try[0]->nextSibling()) {\r\n    if ($z->isCommentNode()) {\r\n        //more code to del \r\n    }\r\n}\r\n```\r\n\r\nИ вообще общий вопрос - как запустить перебор ВСЕХ элементов документа, и их уже проверять на атрибуты? "},"comment":{"url":"https://api.github.com/repos/Imangazaliev/DiDOM/issues/comments/346529691","html_url":"https://github.com/Imangazaliev/DiDOM/issues/91#issuecomment-346529691","issue_url":"https://api.github.com/repos/Imangazaliev/DiDOM/issues/91","id":346529691,"user":{"login":"Imangazaliev","id":11244193,"avatar_url":"https://avatars0.githubusercontent.com/u/11244193?v=4","gravatar_id":"","url":"https://api.github.com/users/Imangazaliev","html_url":"https://github.com/Imangazaliev","followers_url":"https://api.github.com/users/Imangazaliev/followers","following_url":"https://api.github.com/users/Imangazaliev/following{/other_user}","gists_url":"https://api.github.com/users/Imangazaliev/gists{/gist_id}","starred_url":"https://api.github.com/users/Imangazaliev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Imangazaliev/subscriptions","organizations_url":"https://api.github.com/users/Imangazaliev/orgs","repos_url":"https://api.github.com/users/Imangazaliev/repos","events_url":"https://api.github.com/users/Imangazaliev/events{/privacy}","received_events_url":"https://api.github.com/users/Imangazaliev/received_events","type":"User","site_admin":false},"created_at":"2017-11-23T04:24:38Z","updated_at":"2017-11-23T04:24:38Z","author_association":"OWNER","body":"Привет.\r\n\r\n1. Вместо этого:\r\n\r\n```php\r\n$try = $document->find('.entry'); //Получаю массив элементов\r\n$try_doc = $try[0]->toDocument(); //Конверт в документ\r\n```\r\n\r\nможно написать так:\r\n\r\n```php\r\n$try_doc = $document->first('.entry')->toDocument();\r\n```\r\n\r\n2. \"не слишком криво ли\" - очень криво, лучше сделать так:\r\n\r\n```\r\nforeach ($try_doc->find('script') as $scriptEl) { \r\n    $scriptEl->remove();\r\n}\r\n```\r\n\r\n`find()` возвращает массив, который потом итерируется в цикле.\r\n\r\n3. Все эти конвертации в документ, а потом обратно в элемент по сути являются костылем. У элемента есть метод `findInDocument()` (который я забыл (или поленился) описать в документации). Этот метод принимает те же аргументы, что и `find()`, но ищет элементы в документе, к которому он сам относится. Т.е. ваш код можно переписать так:\r\n\r\n```php\r\n$entryEl = $document->first('.entry')->toDocument();\r\n\r\nforeach ($entryEl->findInDocument('script') as $scriptEl) { \r\n    $scriptEl->remove();\r\n}\r\n```\r\n\r\nЕсли в документе только один элемент к классом `entry`, то можно сделать еще проще:\r\n\r\n```php\r\nforeach ($document->findInDocument('.entry script') as $scriptEl) { \r\n    $scriptEl->remove();\r\n}\r\n```\r\n\r\nЕсли их несколько, то можно указать конкретный элемент с помощью псевдоклассов `first-child`, `last-child` и `nth-child`."}}
{"actor":{"display_login":"Imangazaliev"}}