Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Добраться до tr из input и не потерять все) (https://javascript.ru/forum/misc/82512-dobratsya-do-tr-iz-input-i-ne-poteryat-vse.html)

рони 19.05.2021 17:43

repz,
var elems = document.querySelectorAll('tr input[value=""]');
elems.forEach(input => input.closest('tr:last-child') && input.closest('tr:last-child').parentNode && input.closest('tr:last-child').remove());

repz 19.05.2021 17:57

Да, так удаляются, но не все, например:

<tr id="tr_ACTIVE_FROM">


        <td>

    <div>

        <input  type="text" name="ACTIVE_FROM" size="22" value="">

        <span></span>

    </div></td>

</tr>


Вот этот вообще не удаляется, а те что удалились
имели структуру

<tr id="tr_PROPERTY">
			<td></td>
			<td>               ----------вот до этого места
<table >
<tbody>
<tr>
<td>
<input value="" size="30" type="text">
<br>
</td>
</tr>
</tbody>
</table>
</td>
		</tr>

рони 19.05.2021 17:57

repz,
)))
var elems = document.querySelectorAll('tr>td>input[value=""]');
elems.forEach(input => {
var tr = input.parentNode.parentNode;
if(tr.tagName == 'TR' && tr.parentNode) tr.parentNode.removeChild(tr)
});

рони 19.05.2021 17:59

repz,
ок будем ползти циклом до tr ...

repz 19.05.2021 18:04

рони,
Да. удалилось еще больше input, осталось правда этих два:

<tr id="tr_ACTIVE_FROM">
       <td></td>
        <td>
    <div>
        <input  type="text" name="ACTIVE_FROM" size="22" value="">
        <span></span>
    </div></td>
</tr>
 
<tr id="tr_ACTIVE_TO">
        <td></td>
        <td>
    <div>
        <input type="text" name="ACTIVE_TO" size="22" value="">
        <span ></span>
    </div></td>
</tr>


А так все по прежнему, всмысле, все уже не удаляется, но и полностью строка тоже.

рони 19.05.2021 18:05

repz,
<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
        .test td {
            border: 1px solid red;
        }
    </style>
</head>
<body>
    <table>
        <tbody>
            <tr id="tr_ACTIVE_FROM">
                <td>
                    <div>
                        <input type="text" name="ACTIVE_FROM" size="22" value="">
                        <span></span>
                    </div>
                </td>
            </tr>
            <tr id="tr_PROPERTY">
                <td></td>
                <td> ----------вот до этого места
                    <table>
                        <tbody>
                            <tr>
                                <td>
                                    <input value="" size="30" type="text">
                                    <br>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </td>
            </tr>
        </tbody>
    </table>
    <script>
        var elems = document.querySelectorAll('input[value=""]');
        elems.forEach(input => {
            while (input = input.parentNode) {
                if (input.tagName == 'TR' && input.parentNode) {
                    input.parentNode.removeChild(input);
                    break;
                }
            }
        });
    </script>
</body>
</html>

repz 20.05.2021 07:55

рони,
В общем экспериментировал пол ночи, на чистом выдернутом html все , как часы работает. В составе работающего сайта удаляется тот самый <TR>.
Думаю, дальше нет смысла тыкаться наугад, попробую разобрать все скрипты, что есть на сайте, мб один из них, что-то проверяет и потом удаляет. Ручное удаление через консоль <tr> - не приводит к автоудалению первого tr.

Спасибо огромное за помощь.

repz 20.05.2021 08:53

Пришла мысль, заметил, что после выполнения:
var elems = document.querySelectorAll('tr>td>input[value=""]');
elems.forEach(input => {
var tr = input.parentNode.parentNode;
if(tr.tagName == 'TR' && tr.parentNode) tr.parentNode.removeChild(tr)
});


Остается:
<tr>--------------------удалить вот это, если
			<td></td>
			<td>
                           <table>
                             <tbody>---------вот тут ничего нет
                             </tbody>
                           </table>
                        </td>
</tr>

Мб имеет смысл в два этапа, первый, что выше и второй найти все пустые <tbody> -? добраться до tr и удалить его.
Что-то типа
var elems = document.querySelectorAll('table>tbody').length == 0; 
[].forEach.call(elems, function (el) {console.log("find");
});

рони 20.05.2021 09:09

repz,
#26 пробовали?

repz 20.05.2021 09:11

рони,
Конечно, тоже все сносит.


Часовой пояс GMT +3, время: 10:29.