Как удалить только родительский элемент и не его дочерние элементы в JavaScript?

Неправильно, если быть точным:

  1. if isHere is true, возвращается результат getHereCount ()
  2. , иначе возвращается результат getAwayCount ()

То, что «вернулось», очень важно. Это означает, что методы должны возвращать значение, и это значение должно быть назначено где-то.

Кроме того, это не совсем синтаксически эквивалентно версии if-else. Например:

String str1,str2,str3,str4;
boolean check;
//...
return str1 + (check ? str2 : str3) + str4;

Если кодировка с if-else всегда приведет к большему байт-коду.

87
задан TallOrderDev 26 June 2018 в 08:52
поделиться

5 ответов

Используя jQuery можно сделать это:

var cnt = $(".remove-just-this").contents();
$(".remove-just-this").replaceWith(cnt);

Быстрые ссылки на документацию:

134
ответ дан Jonathan Mayhak 24 November 2019 в 07:39
поделиться

Независимый от библиотеки метод должен вставить все дочерние узлы элемента, который будет удален перед собой (который неявно удаляет их из их старого положения) перед удалением его:

while (nodeToBeRemoved.firstChild)
{
    nodeToBeRemoved.parentNode.insertBefore(nodeToBeRemoved.firstChild,
                                            nodeToBeRemoved);
}

nodeToBeRemoved.parentNode.removeChild(nodeToBeRemoved);

Это переместит все дочерние узлы в корректное место в правильном порядке.

36
ответ дан Jonny Buchanan 24 November 2019 в 07:39
поделиться

Необходимо удостовериться, что сделали это с DOM, не innerHTML (и при использовании решения jQuery, предоставленного jk, удостоверьтесь, что это перемещает узлы DOM вместо того, чтобы использовать innerHTML внутренне) для сохранения вещей как обработчики событий.

Мой ответ много похож на insin's, но будет работать лучше для больших структур (добавляющий каждый узел, отдельно может быть налоговым на перерисовках, где CSS должен быть повторно применен для каждого appendChild; с DocumentFragment, это только происходит однажды, поскольку это не сделано видимым, пока его дети все не добавляются, и это добавляется к документу).

var fragment = document.createDocumentFragment();
while(element.firstChild) {
    fragment.appendChild(element.firstChild);
}
element.parentNode.replaceChild(fragment, element);
33
ответ дан Aliaksandr Sushkevich 24 November 2019 в 07:39
поделиться

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

  1. Сохраняют ссылку на родителя внешнего отделения в переменной
  2. Копия внутреннее отделение к другой переменной. Это может быть сделано быстрым и грязным способом путем сохранения innerHTML из внутреннего отделения к переменной, или можно скопировать внутреннее дерево рекурсивно узел узлом.
  3. Вызов removeChild на родителе внешнего отделения с внешним отделением как аргумент.
  4. Вставляют скопированное внутреннее содержание в родителя внешнего отделения в правильном положении.

библиотеки Some сделают некоторых или все это для Вас, но что-то как вышеупомянутое будет продолжаться под капотом.

2
ответ дан domgblackwell 24 November 2019 в 07:39
поделиться

И, так как Вы попробовали в mootools также, вот решение в mootools.

var children = $('remove-just-this').getChildren();
children.replaces($('remove-just-this');

Примечание это полностью не тестируется, но я работал с mootools прежде, и это должно работать.

http://mootools.net/docs/Element/Element#Element:getChildren

http://mootools.net/docs/Element/Element#Element:replaces

2
ответ дан tj111 24 November 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: